介绍了DLL的开发方法

源代码在线查看: 动态连接库的开发与使用.txt

软件大小: 2 K
上传用户: myhpgnl
关键词: DLL
下载地址: 免注册下载 普通下载 VIP

相关代码

				一、动态链接库的介绍
				
				动态链接库(DLL)是一个包含了若干个到处函数的可执行模块,它其实是一个函数包。动态链接库实现了代码和其它资源的共享,具有模块封装特性。
				使用VC6.0的AppWizard创建DLL,DLL的类型有三个选项:
				1、静态链接库;
				2、Win32应用程序和MFC应用程序都能调用的动态链接库;
				3、只有MFC应用程序才能调用的动态链接库。
				一般的开发选用第二项,但是具体的选择要看具体的应用。
				
				
				
				二、动态链接库的实现
				
				各种不同的书籍介绍动态链接库的实现方法都是略有差异的,在这里我做了个归纳。觉得动态链接库的实现是根据后面介绍的、动态链接库的链接方式(隐式链接、显式链接)的不同而不同。所以,我们分两种方式来讲。
				1、隐式链接方法对应的动态链接库的实现
				a、通过AppWizard[DLL]建立dll;
				b、在实现文件.cpp中编写自定义的函数myFun
				_declspec(dllexport) char * WINAPI myFun()
				{
				AFX_MANAGE_STATE(AfxGetStaticModuleState());
				//自己的实现过程
				……
				}
				c、在.h文件里面添加对myFun的声明:
				_declspec(dllexport) char * WINAPI myFun();
				d、编译、链接就生成了动态链接库myFun.dll和关联库myFun.lib
				
				
				2、显式链接方法对应的动态链接库的实现
				a、通过AppWizard[DLL]建立dll;
				b、在实现文件.cpp中编写自定义的函数myFun
				_declspec(dllexport) char * WINAPI myFun()
				{
				AFX_MANAGE_STATE(AfxGetStaticModuleState());
				//自己的实现过程
				……
				}
				c、在.h文件里面添加对myFun的声明:
				_declspec(dllexport) char * WINAPI myFun();
				d、在.def文件下设置EXPORTS先添加导出函数myFun:
				EXPORTS
				  myFun
				e、编译、链接就生成了动态链接库myFun.dll
				
				
				
				三、动态链接库的使用
				
				1、隐式链接
				采用这种方式的时候,应用程序需要使用原动态链接库的导入文件(LIB文件)。
				a、新建测试程序;
				b、添加消息响应,直接使用dll里面的函数;
				c、在消息响应的那个文件的.h文件里面对myFun函数声明为外部定义(extern)函数,以便正确的编译和链接:
				extern  char * WINAPI myFun();
				d、将dll和lib文件拷贝到测试程序目录。
				e、在测试程序中指定lib路径:
				通过Project/Settings指定lib路径。
				f、编译、运行测试程序。
				
				2、显式链接
				区别于隐式链接,采用显式链接方式,应用程序不需要动态链接库的导入文件(LIB文件)。动态链接库中的到处函数必须在模块定义文件(DEF文件)中进行EXPORTS说明。
				a、新建测试程序;
				b、添加消息响应函数:
				{
				typedef char * (*GETDT)();//声明一个指向函数的指针类型
				GETDT GetDT;//声明一个指向函数的指针变量
				FARPROC lpfn=NULL;
				HINSTANCE hinst=NULL;
				hinst=LoadIibrary("myFun.dll");
				if(hinst==NULL)
				{
				MessageBox("Can not load dll");
				return;
				}
				lpfn=GetProcAddress(hinst,"myFun");//获得函数myFun()的地址
				if(lpfn==NULL)
				{
				MessageBox("Can not load function");
				return;
				}
				else
				{
				GetDT=(GETDT)lpfn;
				……
				
				FreeLibrary(hinst);//卸载DLL
				}
				c、编译、运行。
				}			

相关资源