WEB开发网
开发学院软件开发VC DLL(Dynamic Link Libraries)专题 阅读

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、_DLLMainCRTStartu

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调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:DLL Dynamic Link

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接