DLL(Dynamic Link Libraries)专题
2008-11-06 19:26:49 来源:WEB开发网DLL_PROCESS_ATTACH: 进程被调用;
DLL_THREAD_ATTACH: 线程被调用;
DLL_PROCESS_DETACH: 进程被停止;
DLL_THREAD_DETACH: 线程被停止;
lpReserved:是一个被系统所保留的参数。
2、_DLLMainCRTStartup
为了使用"C"运行库(CRT,C Run time Library)的DLL版本(多线程),一个DLL应用程序必须指定_DLLMainCRTStartup为入口函数,DLL的初始化函数必须是DLLMain。
_DLLMainCRTStartup完成以下任务:当进程或线程捆绑(Attach)到DLL时为"C"运行时的数据(C Runtime Data)分配空间和初始化并且构造全局"C++"对象,当进程或者线程终止使用DLL(Detach)时,清理C Runtime Data并且销毁全局"C++"对象。它还调
用DLLMain和RawDLLMain函数。
RawDLLMain在DLL应用程序动态链接到MFC DLL时被需要,但它是静态的链接到DLL应用程序的。在讲述状态管理时解释其原因。
关于约定
动态库输出函数的约定有两种:调用约定和名字修饰约定。
1)调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数弹出栈,以及编译器用来识别函数名字的修饰约定。
函数调用约定有多种,这里简单说一下:
1、__stdcall调用约定相当于16位动态库中经常使用的PASCAL调用约定。在32位的VC++5.0中PASCAL调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal外,__fortran和__syscall也不被支持),取而代之的是__stdcall调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。
- ››Dynamic Multipoint Vpn for IPv6 详解
- ››Linkedin iPhone 3.0应用体验
- ››Dynamic link library for Symbian
- ››DLL(Dynamic Link Libraries)专题
- ››DynamicLayout-VC 6.0对话框动态布局解决方案
- ››link 方法
- ››link-list java版
- ››Links and Anchors: Window 2
- ››DLL文件基本原理及修改方法和通过改DLL来美化系统...
- ››Link Server的语法
- ››DLL头文件的格式和应用
- ››DLL初学者指南(非MFC)
更多精彩
赞助商链接