C與C 之間相互呼叫

2021-07-23 11:50:59 字數 895 閱讀 5949

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 模組使用。以下...