c++builder2007調用VC的dll:

在VC中編寫DLL時,使用了.def文件,在出口函數聲明時也在前面加上了__declspec(dllexport)說明。把VC生成的DLL文件放在了當前目錄下,使用BCB的命令行工具implib生成的.lib文件,具體格式爲implib bcb.lib vc.dll,再把implib根據dll生成的LIB文件加入到工程中,再在工程中加入DLL出口函數的聲明(函數名前加上了WINAPI,即__stdcall;每一個函數定義的最前面也加上了__declspec(dllimport))。 並且因爲BCB和VC++成立函數名轉換的作法不一樣。因此在VC中最好是輸出函數爲C函數的DLL,若是輸出函數是C++類,則可能沒法調用。 個人解決辦法(通過本人實驗證實的,共2種) 方法1:VC編譯c文件生成dll時導出函數頭文件加上extern "C"{}關鍵字,函數聲明和定義處再加調用約定描述符__cdecl,而後將函數聲明和定義處都加上一個下劃線就沒有問題了。 EXAMPLE: 假設我VC的dll中包含int myFunction(void),.c文件中函數實現處的正確寫法是: __declspec(dllexport) int __cdecl _myFunction(void) {         // add your code here } .h文件中函數聲明處的正確寫法以下 __declspec(dllexport) int __cdecl _myFunction(void); BCB調用時只要包含lib文件,具體操做步驟: 運行implib bcb.lib vc.dll project->add to...下拉框中選擇.lib類型,打開剛纔經過implib和vc的dll生成的lib文件 在工程中用到dll的.c源文件中包含該dll的頭文件 調用時直接寫 int i = myFunction(); 便可。 方法2:僅對VC編譯C文件生成dll時有效,導出函數頭文件加上extern "C"{}關鍵字。BCB的Project->option->advanced compiler下的Calling convention中選擇Stdcall就能夠直接調用VC的.c文件編譯生成的動態連接庫了。
相關文章
相關標籤/搜索