這個問題昨天請教了一下大神,記錄之。函數
1.編譯dllspa
建立一個新項目,Win32控制檯應用程序,這裏選DLL。這樣的話編譯事後會自動在Debug目錄下生成dll文件。3d
這樣,會生成以下的目錄:code
其中頭文件裏的第二、3個是自動生成的,源文件裏的一、3個是自動生成的。blog
咱們只須要改動:ip
在DllWithClass.h裏寫:get
extern "C" _declspec(dllexport)//導出
float FunctionMultiply(float x, float y);
這裏第一行是用於DLL導出的,第二行是你所定義的功能函數的聲明it
在DllWithClass.cpp裏寫:io
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文件裏的函數了。