试图在 VB6 的 C++ DLL 中显示 UI 会导致在 AfxGetResourceHandle 处断言

Posted

技术标签:

【中文标题】试图在 VB6 的 C++ DLL 中显示 UI 会导致在 AfxGetResourceHandle 处断言【英文标题】:trying to display UI in C++ DLL from VB6 causes assert at AfxGetResourceHandle 【发布时间】:2012-07-12 22:25:38 【问题描述】:

我有一个旧的 vb6 代码调用 c++ 来显示 MFC 对话框。 调用 AfxGetResourceHandle 将 dll 的资源加载到内存中会导致调试断言。 有人做过吗?

    HINSTANCE priorRes = AfxGetResourceHandle();

    if (m_MDCommonDll == NULL)
    
        m_MDCommonDll = LoadLibrary("MyDll.dll");
    

    AfxSetResourceHandle(m_MDCommonDll);

如果无法做到这一点,有没有办法检测调用者是否来自 vb6,以便我可以跳过显示 UI?

谢谢

【问题讨论】:

这是 MFC 扩展 dll 还是 MFC 常规 DLL? 你使用了 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 吗?检查***.com/questions/9062034/… 感谢您解决了这个问题。你知道 AfxSetResourceHandle 和 AFX_MANAGE_STATE 有什么区别吗?从 MSDN 的描述来看,它们听起来很相似 资源句柄只是进入MFC正则DLL时需要切换的状态之一。 【参考方案1】:

如果混合发布和调试构建 DLL,AfxGetResourceHandle() 可以抛出调试断言。确保您的 .exe 和它加载的任何 .dll 都构建为发布版或调试版。

【讨论】:

以上是关于试图在 VB6 的 C++ DLL 中显示 UI 会导致在 AfxGetResourceHandle 处断言的主要内容,如果未能解决你的问题,请参考以下文章

在 VB6 应用程序中使用 C++ DLL

如何在不通过 COM 的情况下从 VB6 调用 C++ DLL?

从 VB6 访问 C++ DLL 中的位图资源

找不到从 VB6 调用的 C++ DLL 程序

在新的 Visual Studio Express (C++ prefrred) 项目中使用旧版 (VB6) DLL

从 C 调用用 VB6 制作的 DLL