開發環境在Visual studio 2022版本下,為防止編譯器重命名函數名稱(會加上@8等等亂七八糟的東西),我們對函數名稱進行指定:
一、新建.def文件,名稱須與dll名稱相同,并放在與cpp文件相同文件夾下(源文件右鍵->添加新建項,類型為cpp文件,把后綴改成.def):
; a.def - 定義DLL導出函數
LIBRARY a ; 必須與項目生成的DLL文件名一致
EXPORTSGet_Data @28 ; 導出函數名稱指定為Get_Data,序號28
二、在新建的文件右鍵屬性,項類型改為文本
三、寫導出函數,調用類型為__stdcall,格式如下例子:
// int __stdcall Get_Data(int a1, _DWORD *a2, _DWORD *a3, _DWORD *a4, double *a5)
__declspec(dllexport) int __stdcall Get_Data(int VehicleID, int* weight, int* WtLimit, int* alexType, double* speed)
{return 0;
}
四、項目右鍵->屬性->配置屬性->鏈接器->輸入->模塊定義文件,如果.def文件和源文件在同一文件夾下(即當前目錄),直接輸入文件名稱,如果不在,輸入文件路徑(這一步很重要,否則找不到def文件,文件失效):
五、編譯即可!