我创建了一个MFC规则DLL,其功能就是画一个对话框。
使用对话框的函数为:
extern "C" __declspec(dllexport) void load()
{
   CMyDialog dlg;
   dlg.DoModal();
}
头文件声明为:
extern "C" __declspec(dllexport) void load();
我在调用这个load()时发现,窗口无法显示,程序在DoModal()时退出了;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);
}
if (hDialogTemplate != NULL)
lpDialogTemplate = (LPCDLGTEMPLATE)LockResource(hDialogTemplate);
就是在这个 if (hDialogTemplate != NULL) 时退出的。求教高手,我什么地方写错了

解决方案 »

  1.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
      

  2.   

    extern "C" __declspec(dllexport) void load()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
       CMyDialog dlg;
       dlg.DoModal();
    }
      

  3.   


         一个exe去调用一个dll的引出函数去创建对话框的时候(对话框的资源属于dll),
    如果此 DLL 动态链接到 MFCDLL,从此 DLL 导出并调入 MFC 的任何函数在函数的最前面
    都必须添加 AFX_MANAGE_STATE 宏。
         AFX_MANAGE_STATE(AfxGetStaticModuleState());
    但是在扩展的dll中就不可以,
         AFX_MANAGE_STATE(AfxGetAppModuleState()); 加这句
      

  4.   

    HINSTANCE old_hinst = AfxGetResourceHandle(); 
    AfxSetResourceHandle(theApp.m_hInstance); 
    CMyDialog dlg;
    AfxSetResourceHandle(old_hinst);dlg.DoModal();
    创建窗口的时候这样
    可能你没有资源切换吧