在VS工程裏編譯dll / 調用外部dll

這個問題昨天請教了一下大神,記錄之。函數

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文件裏的函數了。

相關文章
相關標籤/搜索