c與c++之間相互呼叫
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的匯出函式。
extern "c"
該**告訴編譯器"mycheader.h"是c寫的,不要修飾標頭檔案中的c函式名,否則連線的時候會找不到。
2、匯出 c++ 函式以用於c語言專案
如果在用c++編寫的dll中有希望從c語言模組訪問的函式,應使用c鏈結而不是c++鏈結來宣告這些函式。除非另外指定,c++編譯器使用c++型別安全命名約定(也稱作名稱修飾)和c++呼叫約定(使用此呼叫約定從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++
p/3405374.html
C與C 之間相互呼叫
1 匯出c函式以用於c或c 的專案 如果使用c語言編寫的dll,希望從中匯出函式給c或c 的模組訪問,則應使用 cplusplus 預處理器巨集確定正在編譯的語言。如果是從c 語言模組使用,則用c鏈結宣告這些函式。如果使用此技術並為dll提供標頭檔案,則這些函式可以原封不動地由c和c 模組使用。以下...
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 模組使用。以下...