对于使用共享 MFC 规则的 DLL,确实没有自动生成 DLLMain 函数。但是,你仍然可以手动添加 DLLMain 函数来处理 DLL_PROCESS_DETACH 事件。

以下是一个示例 DLLMain 函数的实现,用于处理 DLL_PROCESS_DETACH 事件:

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        // DLL 被加载时的处理
        break;

    case DLL_THREAD_ATTACH:
        // 线程创建时的处理
        break;

    case DLL_THREAD_DETACH:
        // 线程结束时的处理
        break;

    case DLL_PROCESS_DETACH:
        // DLL 卸载时的处理
        // 在这里处理 DLL_PROCESS_DETACH 事件
        // ...

        // 调用 AfxTermExtensionModule 函数来释放 MFC 扩展模块资源
        AfxTermExtensionModule(MySharedMFCModule);

        break;
    }

    return TRUE;
}

在 DLL_PROCESS_DETACH 事件中,你可以添加你需要执行的清理代码,例如释放资源、关闭文件句柄等。另外,还需要调用 AfxTermExtensionModule 函数来释放 MFC 扩展模块资源。

请注意,如果你使用共享 MFC 规则生成的 DLL,你不应该手动重写 DLLMain 函数。因为共享 MFC DLL 会自动处理 DLL_PROCESS_DETACH 事件,并在 DLL 卸载时自动调用 AfxTermExtensionModule 函数释放 MFC 扩展模块资源。手动重写 DLLMain 函数可能会导致错误或不正确的行为。

如果你需要在 DLL 卸载时执行一些特定的清理操作,你可以考虑使用其他方式,例如导出一个专门的函数,在需要的时候调用该函数来执行清理操作。

使用共享MFC规则的 dll 没有自动生成 dllmain 如何处理 DLL_PROCESS_DETACH你是错的 共享MFCdll 生成的 dllmain被自动隐藏了。如果强行重写会报错提示重写错误

原文地址: https://www.cveoy.top/t/topic/hQ8j 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录