extern "C" _declspec (dllexport)和_declspec (dllexport)的分別

extern   "C "只是表示這個能夠被C語言調用,除了這個以外,沒有什麼更多含義。
由於C語言的編譯器和C++的不一樣,C++的會有個叫作函數名打散的機制,好比函數:int   add(int   a,int   b)在C++裏面編譯以後,就不是int   add(int   a,int   b),而是相似:int   add@WEROIUERH(int   a,int   b)的函數名,並且是隨機的,若是不用extern   "C ",C語言根本無法調用,而在C++裏面能夠經過@的順序來調用。函數

__declspec   (dllexport)輸出函數的時候,用loadlibrary又有何不可?
關鍵是你要知道輸出符號的名字。
由於c++中有函數重載,經過函數名並不能惟一肯定一個函數,因此使用c++方式編譯函數時系統會在目標碼中的內部修飾符中加入參數信息和返回值信息等, 這時候你能估算出正確的名稱嗎?
若是加了extern   "C "則是用c的方式編譯,函數在目標碼中的內部修飾符就是_函數名,只要用函數名就能夠調用編譯器

因爲C++裏面有函數重載,因此在編譯的時候,編譯器會在你寫的,也就是你但願導出的函數
後面加上一些關於參數的信息,也就是真正導出的函數名字和你想要的不同。
又因爲C語言沒有函數重載,因此用EXTERN "C"的意思就是告訴編譯器不要按照C++那樣修改函數
名稱。
建議用模塊定義文件 .def文件來寫DLL,這樣能夠保證導出函數的純淨。編譯

相關文章
相關標籤/搜索