MFC中如何在资源链中查找资源?

How to search for a resource in resource chain in MFC?

我在扩展 DLL 中有一个对话框模板。我需要从另一个模块 (exe) 创建该对话框。但在创建该对话框之前,我需要知道对话框的大小。所以我试图从对话框模板中获取对话框大小。这是我的代码 -

CSize CEMCNewPropertyPage::CalcDialogSize()
{
    CSize size(0, 0);
    HRSRC hRsrc = FindResource(AfxGetInstanceHandle(),MAKEINTRESOURCE(m_nResourceID), RT_DIALOG); 

    if(hRsrc == NULL)
        return size;

    HGLOBAL hTemplate = ::LoadResource(AfxGetResourceHandle(), hRsrc); 

    if(hTemplate == NULL)
        return NULL;

    DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate); 

    if(pTemplate == NULL)
        return NULL;

    size.cx = pTemplate->cx;
    size.cy = pTemplate->cy;
    ::UnlockResource(hTemplate); 

    return size; 
}

此处,FindResource返回NULL。但是对话框模板在那个扩展 DLL 的资源文件中。所以我假设 FindResource 没有搜索整个资源链。那么,有没有办法强制在整个资源链上进行搜索呢?

I have a dialog template in an extension DLL

您需要保存当前资源句柄 (AfxGetResourceHandle) and set it to the extension dll using AfxSetResourceHandle。当您使用完模板后,您需要将资源句柄恢复到之前的设置。正如您所怀疑的,您当前的代码是实际上只查看 exe。