有時候要獲取乙個關鍵介面時,本地沒有就需要各種呼叫了,雖然方法有點暴力,但沒轍時還是很有效果的,稍作總結
一、c呼叫c++
common/libs/audio/audio_hw.c //再audio hal層呼叫c++的函式
typedef void* fmpcmhandler;
extern fmpcmhandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel);
fmpcmhandler fm_pcm_open_l(struct pcm_config fm_record_config,int bytes,int required_channel)
common/libs/audio/android.mk //把函式定義的原始檔和庫編譯過來
local_c_includes += \
device/sprd/partner/trout/fmhal
local_shared_libraries := \
libengclient libvbeffect libvbpga libfmhalsource
partner/trout/fmhal/fmhalsource.h //要呼叫函式的宣告和定義
extern "c"
partner/trout/fmhal/fmhalsource.cpp
fmpcmhandler fm_pcm_open(int samplerate,int channels,int bytes,int required_channel)
二、c++呼叫c:
沒找到跨模組的合適的函式,這裡是同模組內c++呼叫c;個人覺得如果是跨模組的話就把要用到的庫share過來就行
再要用的模組內編譯進這個c函式(這裡在同一目錄,fmhalsource.cpp呼叫tinyalsa_util.c)
device/sprd/partner/trout/fmhal/android.mk
local_src_files := fmhalsource.cpp ringbuffer.cpp tinyalsa_util.c
定義:device/sprd/partner/trout/fmhal/tinyalsa_util.c
int get_snd_card_number(const char *card_name)
; //loop search card number
for (i = 0; i < 32; i++)
}aloge("there is no one found.");
return -1;
}呼叫:
device/sprd/partner/trout/fmhal/fmhalsource.cpp
extern "c"
3、kernel裡呼叫
3.1 普通的全域性變數使用
全域性變數定義:
kernel\drivers\net\wireless\bcmdhd\dhd_common.c
bool ap_fw_loaded = false;
其他地方呼叫:
kernel\drivers\net\wireless\bcmdhd\wl_android.c
extern bool ap_fw_loaded;
kernel/driver/mmc/core/core.h //這個標頭檔案的宣告貌似可以沒有
void mmc_power_off(struct mmc_host *host);//這個標頭檔案的宣告貌似可以沒有
全域性函式的定義:
kernel/driver/mmc/core/core.c
void mmc_power_off(struct mmc_host *host)
其他地方呼叫:
kernel\drivers\mmc\host\sc8830.c
extern void mmc_power_off(struct mmc_host* mmc);
3.2 kernel與模組之間呼叫
3.2.1 模組呼叫kernel的全域性變數或者函式, 用export_symbol即可
變數的定義:
kernel\arch\arm\mach-sc\dhd_adapter.c
struct mmc_host *gmmc;
export_symbol_gpl(gmmc);
呼叫:kernel\drivers\net\wireless\bcmdhd\bcmsdh_sdmmc_linux.c
extern struct mmc_host *gmmc;
函式的定義:
kernel\drivers\mmc\host\sc8830.c
int sdhci_device_attach(int on)
else
}else
return 0;
} return 0;
}export_symbol_gpl(sdhci_device_attach);
函式的呼叫
kernel\drivers\net\wireless\bcmdhd\wl_android.c
extern int sdhci_device_attach(int on);
3.2.2 核心呼叫模組
核心無法呼叫模組的全域性變數
核心可以呼叫模組的全域性函式 (android 10,kernel 4.9)
test.h 裡可如下定義,然後c++裡實現定義,c裡呼叫。都包含這個test.h 即可;然後可能需要檢查下庫
#ifdef __cplusplus
extern "c"
#endif
thinkphp 跨模組呼叫
專案簡介 測試專案名為tp3.0 訪問 localhost tp3.0 安裝環境 windows apache mysql php 模組分組 測試時將模組分為兩組home,admin,根據需求還可以新增更多分組,比如 home,admin,user,article。一 跨模組呼叫例項 簡介 在ind...
tp跨模組呼叫
在乙個模組的方法中,如果需要呼叫其他模組的方法 可以再方法中,直接new其他 模組名action 來得到 module new moduleaction 例 假設在user模組reg 方法中想呼叫wuliao模組的wu 方法 方法 1 wuliao new wuliaoaction wuliao w...
package跨模組呼叫
module包 logger模組 deflogger print logger logger main模組 from module import logger 這裡之所以要加from module 是因為在bin中執行查詢不到logger defmain logger.logger main bin...