小談動態鏈接庫

1、動態鏈連庫可以使用__declspec(dllexport)和def文件兩種方式實現,兩種方式只能同時有一種

2、如果使用extern "C"的話,則導出的函數按照C語言的命令規則,C的方式實際的函數名和你寫的一樣,
即可以用LoadLibrary方式GetProcAddress傳入的函數名來取到函數地址

3、不使用extern "C"的話,導出的函數名稱會按照C++的命令機制,會用"@","?"等處理函數參數和返回值,
此點與C有區別是因爲C++存在重載,所以需要對參數及返回值做出詳細區分

4、如果要使用extern "C",需要保證所要導出的函數中不能出現C++特有的規則,如類、string、bool、容器等

5、如果dll要跨語言調用,則函數涉及的所有數據類型最好是基本數據類型,如int,char*等,不要出現某種語言
獨有的數據類型,如C++的std::string等,插件化的系統此項要求非常重要

6、__declspec(dllexport)聲明一個導出函數,是說這個函數要從本DLL導出,我要給別人用,一般用在DLL中

7、__declspec(dllimport)聲明一個導入函數,是說這個函數是從其它DLL導入的,我要用別人的DLL,一般用在
調用DLL的exe程序中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章