VS2008/MFC/CDialog 的资源定位问题

发现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 的资源定位问题)