试图在 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 处断言的主要内容,如果未能解决你的问题,请参考以下文章
如何在不通过 COM 的情况下从 VB6 调用 C++ DLL?