接触VC之四:COM组件模型基础
2006-07-19 11:36:48 来源:WEB开发网核心提示: 要使用动态链接库并不难,首先要调用LoadLibrary,其原型如下:HMODULE LoadLibrary(LPCTSTR lpFileName // file name of module);参数lpFileName是要加载的动态链接库的文件名,接触VC之四:COM组件模型基础(3),
要使用动态链接库并不难,首先要调用LoadLibrary,其原型如下:
HMODULE LoadLibrary(
LPCTSTR lpFileName // file name of module
);
参数lpFileName是要加载的动态链接库的文件名。如果加载成功的话,就返回其句柄。否则的,返回NULL。
与这个API相配对的是FreeLibrary,其原型如下:
BOOL FreeLibrary(
HMODULE hModule // handle to DLL module
);
这个就不用我多说了吧。
当动态链接库被LoadLibrary所加载时,C运行库通过_DllMainCRTStartup来完成动态链接库的初始化,如全局对象(变量)、静态成员变量的生成以及赋初值。最重要的是它还会调用DllMain函数。每一个动态链接库都必须有这个函数,就像应用程序必须有main或WinMain一样。它的原型是:
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
);
你可以通过DllMain函数来完成你的动态链接库中的环境初始化和析构操作。啊,事情是这样的:
DllMain被调用有四种情况,这四种情况可以从fdwReason参数来分别出来:
它们分别是
1. DLL_PROCESS_ATTACH,当动态链接库被加载到进程时,调用DllMain。
2. DLL_THREAD_ATTACH,当进程建立一个新线程时,进程会调用所以已加载了的动态链接库的DllMain。
3. DLL_THREAD_DETACH,当一个线程结束时,进程会调用所以已加载了的动态链接库的DllMain。
4. DLL_THREAD_DETACH,当动态链接库被缷载或进程结束时,调用DllMain。
这样,通过DllMain函数就可以反应出一个动态链接库的生命周期了。
更多精彩
赞助商链接