发现VS2008带的MFC库似乎有问题。CDialog::DoModal和CDialog::Create中用FindResource寻找对话框资源时使用的模块句柄(由AfxFindResourceHandle得到)始终是Exe的句柄。所以在动态链接库中使用对话框时会出现资源定位失败。具体代码如下:
INT_PTR CDialog::DoModal()
{
// can be constructed with a resource template or InitModalIndirect
ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
m_lpDialogTemplate != NULL);
// load resource as necessary
LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
HGLOBAL hDialogTemplate = m_hDialogTemplate;
HINSTANCE hInst = AfxGetResourceHandle();
if (m_lpszTemplateName != NULL)
{
hInst = AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
HRSRC hResource = ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
hDialogTemplate = LoadResource(hInst, hResource);
}
...
}
BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleChild)
{
ASSERT(lpszResource != NULL);
HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG);
HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG);
...
}
VS2008/MFC/CDialog 的资源定位问题
最新推荐文章于 2021-07-27 14:37:58 发布
本文探讨了VS2008中MFC库存在的一个问题:在动态链接库中使用CDialog::DoModal和CDialog::Create时,由于模块句柄始终指向Exe而无法正确定位到对话框资源,导致资源定位失败。

1万+

被折叠的 条评论
为什么被折叠?



