|
发表于 2019-8-27 08:21:32
|
显示全部楼层
以下是MFC源码截取,出于成本、兼容性、可重用性、推广....,MFC是不可能重复造轮子的!
- DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
- {
- // 如果使用 lpReserved,请将此移除
- UNREFERENCED_PARAMETER(lpReserved);
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- TRACE0("MyDll.DLL 正在初始化!\n");
-
- // 扩展 DLL 一次性初始化
- if (!AfxInitExtensionModule(ddsDLL, hInstance))
- return 0;
- // 将此 DLL 插入到资源链中
- // 注意: 如果此扩展 DLL 由
- // MFC 规则 DLL (如 ActiveX 控件)隐式链接到,
- // 而不是由 MFC 应用程序链接到,则需要
- // 将此行从 DllMain 中移除并将其放置在一个
- // 从此扩展 DLL 导出的单独的函数中。使用此扩展 DLL 的
- // 规则 DLL 然后应显式
- // 调用该函数以初始化此扩展 DLL。否则,
- // CDynLinkLibrary 对象不会附加到
- // 规则 DLL 的资源链,并将导致严重的
- // 问题。
- new CDynLinkLibrary(ddsDLL);
- }
- else if (dwReason == DLL_PROCESS_DETACH)
- {
- TRACE0("dds.DLL 正在终止!\n");
- // 在调用析构函数之前终止该库
- AfxTermExtensionModule(ddsDLL);
- }
- return 1; // 确定
- }
复制代码- BOOL WINAPI ExtRawDllMain(HINSTANCE, DWORD dwReason, LPVOID)
- {
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- // save critical data pointers before running the constructors
- AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
- pModuleState->m_pClassInit = pModuleState->m_classList;
- pModuleState->m_pFactoryInit = pModuleState->m_factoryList;
- pModuleState->m_classList.m_pHead = NULL;
- pModuleState->m_factoryList.m_pHead = NULL;
- }
- return TRUE; // ok
- }
复制代码 |
|