作者:雷神
把c++的类写进dll里,单独的编译。程序运行时可以快速装载并连接到dll上,这样叫做标准的模块软件。大大提高代码的重用型。dll是运行时的模块。
win32 dll允许导出全局变量,就象导出函数一样。只要dll申请内存,就从客户程序的进程的内存堆中进行内存分配。
dll包含一个导出函数表,它包含了函数在dll内的地址,但当客户程序装入dll时并不知道要调用的函数地址,它是通过函数的符号化名字和序号来识别这些函数的。简单的程序通常是一个exe从一个或多个dll导入函数;
而实际上许多dll调用了其他dll里的函数。因此一个dll可以同时有导入和导出。
在dll代码中,我们必须显示声明导出函数在客户方也应声明对应的导入函数:
_declspec(dllexport) int myfunction(int n); //dll中
_declspec(dllimport) int myfunction(int n); //exe
可以用将 extern"c" 加在函数声明的前面的方法来告诉编译器-需要使用普通的函数名,以防编译器产生其他语言不能使用的修饰名。
连接dll可以是隐式连接或显式连接,隐式连接在客户程序被装载时装载,显式连接可以决定什么时候装载或卸出,还允许我们在运行时决定装载哪个dll。
dll的入口点是dllmain。进程中的每一个dll都有一个唯一的32位hinstance值所标识。此外进程本身也有一个hinstance值,所有这些实例句柄只有在进程内部有效,它代表了dll或exe的起始虚拟地址。进程(exe)实例句柄几乎总是0x400000,而装入在默认基地址的dll的句柄是0x10000000,如果有多个dll,则每个都有不同的hinstance值。
获得exe的句柄用null参数调用win32的getmodulehandle函数,获得dll的句柄用dll的名字做参数调用getmodulehandle函数。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器