這個問題昨天請教了一下大神,記錄之。
1.編譯dll
創建一個新項目,Win32控制台應用程序,這里選DLL。這樣的話編譯過后會自動在Debug目錄下生成dll文件。
這樣,會生成如下的目錄:
其中頭文件里的第2、3個是自動生成的,源文件里的1、3個是自動生成的。
我們只需要改動:
在DllWithClass.h里寫:
extern "C" _declspec(dllexport)//導出
float FunctionMultiply(float x, float y);
這里第一行是用於DLL導出的,第二行是你所定義的功能函數的聲明
在DllWithClass.cpp里寫:
extern "C" _declspec(dllexport) float FunctionMultiply(float x, float y) { return x*y; }
第一行對應.h里面的,注意不要打分號。然后就是定義函數體了。
這樣編譯就會生成一個實現簡單乘法的dll文件。
2.調用dll
建立一個Win32控制台應用程序,這里是為了生成.exe
調用dll有三步所需要做的事情:
1>代碼部分,這里面只需要改動UseDllWithClass.cpp文件
添加如下代碼:
#include "..\DllWithClass\DllWithClass.h"
int _tmain(int argc, _TCHAR* argv[]) { float FunctionResult = FunctionMultiply(1.2f, 5.0f); printf("%f", FunctionResult); getchar(); return 0; }
其中對於被調用.dll文件的頭文件的引用,使用了相對路徑。這里有個小知識:由於. vcxproj這個文件的內容代表着.exe文件所在的目錄
..\表示着返回上一目錄,所以這個查找的順序是:從.exe返回上一級目錄,再打開\DllWithClass目錄,找到DllWithClass.h
為了方便,也可以直接把.dll文件放在.exe所在目錄下,這樣就可以直接#include "DllWithClass.h"
2>打開項目屬性-鏈接器-常規
附加庫目錄里加上.lib文件所在的目錄,同樣可以使用相對路徑:
如果.lib文件直接放在.exe文件目錄下,這里可以不用設置(所以最方便的方式還是把.h/.lib/.dll全放在.exe文件的目錄下)
3>打開項目屬性-鏈接器-輸入
附加依賴項里加上.lib文件名
完成這些設置,就可以直接調用封裝在.dll文件里的函數了。