最近學到了一個非常方便的從VisualStudio的project中生成dll的方法,記錄如下:
以一個簡單的工程作為例子,假設現在我們有一個叫dllDemo的工程,里面有如下兩個文件:
dllDemo.h
#include<stdlib.h> #include<stdio.h> int main (); int Max(int x,int y);
dllDemo.cpp
#include"dllDemo.h"
int main ()
{
int max_value=Max(100,7);
printf("%d\n",max_value);
return 0;
}
int Max(int x,int y)
{
return x>y?x:y;
}
我用的是vs2005,其他的也大同小異,目錄結構如下:

如圖,這是一個非常簡單工程,里面也沒什么東西,只有一個main函數和一個做示范的max函數。
現在,我們的目的就是把這個max函數從這個項目里面提取出來,封裝成一個dll文件,讓其他的程序可以調用通過dll文件調用這個函數。
第一步
首先,我們用記事本創建一個.def文件,文件名的話隨便起一個就行,比如叫:GenDll.def,然后按照以下格式填寫內容:
LIBRARY "your_project_name" EXPORTS your_function_name
例如,我們的項目名稱叫DllDemo,需要封裝到dll文件中的函數叫max,就這么寫:
LIBRARY "dllDemo" EXPORTS Max
然后把GenDll.def復制到DllDemo\DllDemo目錄下,並且在項目中把這個文件添加到源文件夾里面。其實直接右鍵添加新建項,然后新添加一個def文件應該也可以,不過我的vs2005每次這么做的時候都會報錯,所以,為了保險起見,還是按照上述的方法做。此時,我們的目錄結構如下:

第二步
這一步我們需要對項目的屬性進行一些修改,
1.右鍵項目-屬性-配置屬性-常規-配置類型-動態庫dll

2.右鍵項目-屬性-鏈接器-常規-輸出文件-把文件名稱后綴改為dll

3.右鍵項目-屬性-鏈接器-輸入-模塊定義文件-輸入def文件名稱

4.右鍵項目-屬性-鏈接器-高級-導入庫-輸入$(TargetDir)$(TargetName).lib

OK,做到這一步基本就完成了,配置屬性結束了。
第三步
重新生成一遍解決方案,然后在DllDemo\debug下就會發現多了一個DllDemo.dll文件,這個就是我們需要的dll文件。

第四步
上面三個步驟生成了我們想要的dll文件,但是我們還沒有測試這個dll是否可用。有的時候,很可能由於疏忽,導致dll文件里面的函數有問題。因此,我們還要寫一個test程序,來測試性能。
方法也很簡單,直接在當前的解決方案上右鍵-新建項目,然后隨便起個名,我的是DllTest,目錄結構如下:

DllTest.cpp內容如下:
#include<stdlib.h>
#include<stdio.h>
#include<Windows.h>
int Max(int x,int y);
int main ()
{
int max_value=Max(300,127);
printf("%d\n",max_value);
system("pause");
return 0;
}
然后把項目依賴性里面DllTest的依賴項改為DllDemo,然后把DllTest設置為啟動項,接下來啟動調試,
如果編譯沒有問題,且控制台輸出如下內容:

恭喜你,你的dll文件生成成功並且沒有問題。
