C與C 之間相互呼叫

2021-09-22 09:20:37 字數 994 閱讀 8978

1、匯出c函式以用於c或c++的專案

如果使用c語言編寫的dll,希望從中匯出函式給c或c++的模組訪問,則應使用 __cplusplus 預處理器巨集確定正在編譯的語言。如果是從c++語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由c和c++模組使用。

以下**演示可由 c 和 c++ 客戶端應用程式使用的標頭檔案:

//

mycfuncs.h

#ifdef __cplusplus

extern"c

" #endif

mycfunc()和anothercfunc()為c語言dll的匯出函式。

如果需要將c函式鏈結到c++可執行檔案,並且函式宣告標頭檔案沒有使用上面的技術,則在c++原始檔中新增下列內容以防止編譯器修飾c函式名:

extern"c

"

該**告訴編譯器"mycheader.h"是c寫的,不要修飾標頭檔案中的c函式名,否則連線的時候會找不到。

2、匯出 c++ 函式以用於c語言專案

如果在用c++編寫的dll中有希望從c語言模組訪問的函式,應使用c鏈結而不是c++鏈結來宣告這些函式。除非另外指定,c++編譯器使用c++型別安全命名約定(也稱作名稱修飾)和c++呼叫約定(使用此呼叫約定從c呼叫會很困難)。

若要指定 c 鏈結,請在dll中為函式宣告指定 extern "c"。例如:

extern"c

" __declspec( dllexport ) int myfunc(long parm1);

//

extern"c

"void call_lib_cppfunction(lib* p, dataattribute*dataattribute) //

dafun才是我們c++**的實現

void lib::dafun(dataattribute*dataattribute)

C與C 之間相互呼叫

c與c 之間相互呼叫 1 匯出c函式以用於c或c 的專案 如果使用c語言編寫的dll,希望從中匯出函式給c或c 的模組訪問,則應使用 cplusplus 預處理器巨集確定正在編譯的語言。如果是從c 語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由...

C與C 之間相互呼叫

1 匯出c函式以用於c或c 的專案 如果使用c語言編寫的dll,希望從中匯出函式給c或c 的模組訪問,則應使用 cplusplus 預處理器巨集確定正在編譯的語言。如果是從c 語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由c和c 模組使用。以下...

C與C 之間dll相互呼叫

1 匯出c函式以用於c或c 的專案 如果使用c語言編寫的dll,希望從中匯出函式給c或c 的模組訪問,則應使用 cplusplus 預處理器巨集確定正在編譯的語言。如果是從c 語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由c和c 模組使用。以下...