1:創建DLL工程
文件->新建->項目->visual c++->win32->win32控制臺應用程序(win32項目也可以)
填寫項目名稱MyDLL->確定->下壹步->DLL(附加選項 對空項目打鉤)->完成。
到這裏DLL工程就創建完畢了,下面新建兩個文件MyDLL.cpp和MyDLL.h。
MyDLL.cpp內容如下:
1?#include?
2?using?namespace?std;?
3?#include?"MyDLL.h"?
4?
5?int?Add(int?&a,int?&b)?
6?{?
7?return?a+b;?
8?}?
MyDLL.h內容如下:?
1?#pragma?once?
2?
3?extern?"C"?__declspec(dllexport)?int?Add(int?&a,int?&b);?
點擊生成Bulid -->Bulid MyDLL,dll文件就生成了,vs2008不能直接生成lib文件,這個時候就需要我們在建立dll工程的時候 再新建壹個def文件,默認生成然後重新生成就能夠得到lib文件了,但可以通過修改工程屬性裏面的general->project default->configure type修改為lib,就可以生成lib文件。
註意:如果在已存在的工程上創建dll或者lib,不需要修改工程,只要把工程屬性裏面的general->project default->configure type修改為lib或者dll,就可以生成lib文件或者dll文件了
在C++程序中使用剛才生成的DLL文件步驟:
新建壹個win32 控制臺工程,取名testMyDLL,新建兩個文件:testMyDLL.cpp和testMyDLL.h,
首先需要?隱式鏈接采用靜態加載的方式,比較簡單,需要.h、.lib、.dll三件套。新建“控制臺應用程序”或“空項目”。配置如下:(這壹點非常重要)
項目->屬性->配置屬性->VC++?目錄->?在“包含目錄”裏添加頭文件MyDLL.h所在的目錄?
項目->屬性->配置屬性->VC++?目錄->?在“庫目錄”裏添加頭文件MyDLL.lib所在的目錄?
項目->屬性->配置屬性->鏈接器->輸入->?在“附加依賴項”裏添加“MyDLL.lib”(若有多個?lib?則以空格隔開)
testMyDLL.cpp內容如下:
#include?"testMyDLL.h"?
#pragma?comment(lib,"..\\debug\\MyDLL.lib")//可以寫成絕對路徑,但是路徑壹定要用\\來指明,即:J:\\Pr//ograms\\C++\\Practice\\DLLTEST\\DLLtest\\Debug\\MyDLL.lib"#include?
using?namespace?std;
int?main()?
{
int?a?=3;
int?b?=2;
cout<<Add(a,b)<<endl;
getchar();
}?
testMyDLL.h內容如下
#pragma?once?
extern?"C"?_declspec(dllexport)?int?Add(int?&a,int?&b);?
現在可以編譯通過了,但是程序運行就報錯,還需要將MyDLL.dll復制到當前項目生成的可執行文件所在的目錄。(這壹點非常重要)
這裏需要註意testMyDLL.cpp文件中調用lib的這句話:
#pragma?comment(lib,"..\\debug\\MyDLL.lib")?
這裏需要指明lib所在的文件夾,當然我們也可以在生成dll的MyDLL工程中,指定lib和dll文件的輸出路徑,直接到testMyDLL工程下。
註意:如果只有dll文件,那麽必須在程序裏面調用LoadLibrary()函數才能使用,如果有lib文件,那麽有兩種方式可以馬上進行調用