1、導出c函數以用于c或c++的項目
如果使用c語言編寫的dll,希望從中導出函數給c或c++的子產品通路,則應使用 __cplusplus 預處理器宏确定正在編譯的語言。如果是從c++語言子產品使用,則用c連結聲明這些函數。如果使用此技術并為dll提供頭檔案,則這些函數可以原封不動地由c和c++子產品使用。
以下代碼示範可由 c 和 c++ 用戶端應用程式使用的頭檔案:


mycfunc()和anothercfunc()為c語言dll的導出函數。
如果需要将c函數連結到c++可執行檔案,并且函數聲明頭檔案沒有使用上面的技術,則在c++源檔案中添加下列内容以防止編譯器修飾c函數名:
該代碼告訴編譯器"mycheader.h"是c寫的,不要修飾頭檔案中的c函數名,否則連接配接的時候會找不到。
2、導出 c++ 函數以用于c語言項目
如果在用c++編寫的dll中有希望從c語言子產品通路的函數,應使用c連結而不是c++連結來聲明這些函數。除非另外指定,c++編譯器使用c++類型安全命名約定(也稱作名稱修飾)和c++調用約定(使用此調用約定從c調用會很困難)。
若要指定 c 連結,請在dll中為函數聲明指定 extern "c"。例如:
在c語言的函數中是無法直接調用c++代碼的,如果要調用,可以做一個wrapper,例如call_lib_cppfunction,它的聲明和實作如下:


本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
http://www.cnblogs.com/luxiaoxun/p/3405374.html