您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > Visual-Studio-2010--动态库(Dll)的动态引用和静态引用
VisualStudio2010DLL动态引用和静态应用的要求:引用方式要求动态引用MyDLL.dll静态引用MyDLL.dll,MyDLL.lib,MyDLL.h静态加载DLL的步骤如下:1.将MyDLL.dll,MyDLL.lib,MyDLL.h拷贝到目标工程(需调用MyDLL.DLL的工程)的Debug目录下。2.配置头文件路径:选择项目-属性-C/C++-常规-附加包含目录:设置头文件路径。3.配置DLL和LIB文件路径:选择项目-属性-连接器-常规-附加库目录:设置DLL和LIB文件路径。4.加载Lib文件:方法一:选择项目-属性-连接器-输入-附加依赖项:输入要加载的Lib文件名(加载多个Lib文件时,以回车为分隔符)。方法二:在程序中使用#pragmacomment(lib,MyDLL.lib)进行设定。5.配置该应用程序.exe的生成目录要和加载的DLL、LIB放在同一目录:选择项目-属性-连接器-常规-输出文件。6.在目标工程(*.cpp,需要调用DLL中的函数)中加入:#includeMyDLL.h动态加载DLL的步骤如下:1.声明头文件windows.h,说明要用windows32方法来加载和卸载DLL。例如:#includeWindows.h2.用typedef定义一个函数指针类型,这个指针类型要与调用的DLL引出函数类型和参数保持一致。例如:typedefvoid(*FUN)(int,int);3.通过Win32API函数LoadLibrary()显式的调用DLL,此函数返回DLL的实例句柄。这里字符串类型是LPSTR,当是unicode字符集的时候会不行,因此要在配置-属性-常规里面把默认字符集“unicode”改成支持多字符扩展即可。例如:constchar*dllName=MyDLL.dll;HMODULEhDLL=LoadLibrary(dllName);4.取到的地址要判断返回的句柄是否为空,如果为无效句柄,那么要释放加载DLL所占用的内存。例如:if(hDLL!=NULL){}else{FreeLibrary(hdll)}5.定义一个函数指针,用来获取你要用的函数地址,通过GetProcAdress来获取函数的地址,这里也要判断要函数指针是否为空,如果没取到要求的函数,那么要释放句柄。例如:FUNfp=FUN(GetProcAddress(hDLL,funName));if(fp!=NULL){}6.通过函数指针来调用函数。这里不能用函数名来使用函数,因为这个DLL本身不是当前CPP的一部分,而是通过windows去调用。例如:fp(x,y)7.最后调用结束后,就释放句柄。例如:FreeLibrary(hdll)要点包含头文件Windows.h,原因在于程序中用到了LoadLibrary、FreeLibrary、GetProcAddress等Win32API函数。FUNA和FUNB是函数指针类型的声明。当程序不再使用dll时,应该调用FreeLibrary及时释放它占用的内存空间。如果在constchar*dllName和funName底部出现红色波浪线提示,说明采用的字符集不匹配,需要修改项目UseDLL的属性CharaterSet为NotSet。为方便项目的调试,建议修改解决方案的StartupProject属性为Singlestartupproject并以UseDLL为首选。以具体实例说明动态加载DLLMyDLL.h文件为:1.#ifdefMyDLL_EXPORTS2.#defineMyDLL_API__declspec(dllexport)3.#else4.#defineMyDLL_API__declspec(dllimport)5.#endif6.7.MyLL_APIvoidAdd(int,int);修改MyDLL.cpp文件为:1.MyDLL_APIvoidAdd(inta,intb)2.{3.returna+b;4.}使用DLL的代码:1.#includeWindows.h2.typedefvoid(*FUN)(int,int);3.intmain()4.{5.constchar*dllName=MyDLL.dll;6.constchar*funName=Add;7.intx(100),y(100);8.HMODULEhDLL=LoadLibrary(dllName);9.if(hDLL!=NULL)10.{11.FUNAfp=FUNA(GetProcAddress(hDLL,funName));12.if(fp!=NULL)13.{14.intsum=fp(x,y);15.}16.FreeLibrary(hDLL);17.}18.}
本文标题:Visual-Studio-2010--动态库(Dll)的动态引用和静态引用
链接地址:https://www.777doc.com/doc-2866395 .html