生活随笔
收集整理的這篇文章主要介紹了
vs2008 C++创建和调用标准DLL
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為了共享代碼,需要生成標(biāo)準(zhǔn)的dll,本文將介紹在vs2008 C++生成及調(diào)用dll。
一、生成DLL
????生成一個(gè)名為FunDll的dll文件,對外函數(shù)為addl。
???step1:vs2008 環(huán)境下,文件-->新建項(xiàng)目,選擇visual c++,在選擇 “Win32 項(xiàng)目”,鍵入項(xiàng)目名稱,如 FunDll。如圖:
???
點(diǎn)擊下一步,勾選“DLL”和“導(dǎo)出空符號”,單擊“完成”
??
step 2,編寫功能函數(shù)
???執(zhí)行完step1步驟后,在FunDll.h 和FunDll.cpp中會生成一些實(shí)例代碼,先把這些注釋掉,同時(shí)修改FunDll.h中的預(yù)處理宏定義為:
#ifdef FUNDLL_EXPORTS
#define FUNDLL_API extern "C" __declspec(dllexport)
#else
#define FUNDLL_API extern "C" __declspec(dllexport)
#endif
在FunDll.h中聲明add函數(shù),在FunDll.cpp中實(shí)現(xiàn)該函數(shù)。修改完后代碼如下:
FunDll.h:
[cpp]?view plaincopy
//?下列?ifdef?塊是創(chuàng)建使從?DLL?導(dǎo)出更簡單的?? //?宏的標(biāo)準(zhǔn)方法。此?DLL?中的所有文件都是用命令行上定義的?FUNDLL_EXPORTS?? //?符號編譯的。在使用此?DLL?的?? //?任何其他項(xiàng)目上不應(yīng)定義此符號。這樣,源文件中包含此文件的任何其他項(xiàng)目都會將?? //?FUNDLL_API?函數(shù)視為是從?DLL?導(dǎo)入的,而此?DLL?則將用此宏定義的?? //?符號視為是被導(dǎo)出的。?? ?? #ifdef?FUNDLL_EXPORTS?? #define?FUNDLL_API?extern?"C"?__declspec(dllexport)?? #else?? #define?FUNDLL_API?extern?"C"?__declspec(dllexport)?? #endif?? FUNDLL_API?int?_stdcall?add(int?plus1,int?plus2);?? FunDll.cpp
[cpp]?view plaincopy
#include?"stdafx.h"?? #include?"FunDll.h"?? ?? int?_stdcall?add(int?plus1,int?plus2)?? {?? ????int?ret?;?? ????ret=plus1+plus2;?? ????return?ret;?? }?? step3:添加 FunDll.def,修改內(nèi)容為
[cpp]?view plaincopy
LIBRARY?"FunDll"?? EXPORTS?? ????add??
step 4,發(fā)布FunDll.dll文件
二,調(diào)用FunDll.dll
step1,新建C++控制臺程序,項(xiàng)目名稱為TestDll。
修改TestDll.cpp的代碼為:
[cpp]?view plaincopy
//?TestDll.cpp?:?定義控制臺應(yīng)用程序的入口點(diǎn)。?? //?? ?? #include?"stdafx.h"?? #include??? #include??? #include??? ?? //定義MYPROC為指向一個(gè)返回值為int型的函數(shù)的指針?? typedef?int?(__stdcall?*MYPROC)(int?a,int?b);?? ?? int?_tmain(int?argc,?_TCHAR*?argv[])?? {????? ????HINSTANCE?hinstLib;?? ????MYPROC?ProcAdd;?? ????int?val1,val2,res;?? ????val1=4;?? ????val2=5;?? ????//?Get?a?handle?to?the?DLL?module.?? ????hinstLib?=?LoadLibrary(L"FunDll.dll");??? ?? ????//?If?the?handle?is?valid,?try?to?get?the?function?address.?? ????if?(hinstLib?!=?NULL)??? ????{??? ????????ProcAdd?=?(MYPROC)?GetProcAddress(hinstLib,?"add");??? ????????res=(ProcAdd)(val1,val2);?? ????????printf("%d\n",res);?? ????}?? ????????return?0;?? }??
step2,把FunDll拷貝至TestDll項(xiàng)目文件夾下。
step3,運(yùn)行,測試通過。
總結(jié)
以上是生活随笔為你收集整理的vs2008 C++创建和调用标准DLL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。