我在MFC扩展DLL中创建了一个导出函数ibrd,在这个函数中调用DLL中定义的对话框资源对象,部分代码如下:……
#define EQUIPAPI __declspec(dllexport)
……EQUIPAPI int ibrd()
{
// gpib_dlg.UpdateData(TRUE);// AFX_MANAGE_STATE(AfxGetStaticModuleState());    CGPIB_Simulation_Dlg gpib_dlg; gpib_dlg.DoModal();
gpib_dlg.m_Cshow = _T("0");
gpib_dlg.UpdateData(FALSE);
return 0;
}其中的m_Cshow是对话框上的文本编辑框对应的CString 类型的变量。当我在应用程序中调用函数ibrd(); 时,可以出现对话框,但是编辑框中不显示数字 0 。还出现了四个断言错误:wincore.cpp 4184和4191行
winocc.cpp  104行
dlgdata.cpp 44行请问一下高手这是怎么回事啊?如何解决呢?

解决方案 »

  1.   

    次序错了。
    gpib_dlg.m_Cshow = _T("0"); 
    gpib_dlg.DoModal();
    DoModal完了以后,对话框就销毁了
      

  2.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());  
    ------------------------------------------------这个要gpib_dlg.m_Cshow = _T("0");
    gpib_dlg.DoModal(); 
      

  3.   

    楼上说得对。加上AfxGetStaticModuleState()就可以了。   
      

  4.   

    AfxGetStaticModuleState
    这个不能注销
      

  5.   

    谢谢楼上各位大侠!现在可以显示数字了,但是当把被导出的对话框关闭时,这几个断言错误仍然存在。如果我把AFX_MANAGE_STATE(AfxGetStaticModuleState()); 加上,却会出现三个生成错误,如下
    GPIB_Simulation_DLL error LNK2005: _DllMain@12 已经在 GPIB_Simulation_DLL.obj 中定义
    GPIB_Simulation_DLL warning LNK4006: _DllMain@12 已在 GPIB_Simulation_DLL.obj 中定义;已忽略第二个定义
    GPIB_Simulation_DLL fatal error LNK1169: 找到一个或多个多重定义的符号刚学DLL,被这些弄晕了,请高手们不吝赐教,不胜感激!!!
      

  6.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    --------------------------------------
    看错了,扩展的这个不要
      

  7.   

    刚看到一篇资料,说在MFC扩展DLL中需要将AFX_MANAGE_STATE(AfxGetStaticModuleState());换成AFX_MANAGE_STATE(AfxGetAppModuleState());才能正确切换当前模块状态。我试了下,编译没有生成错误了,可是断言错误还存在,弄不明白这些,会者不难,请指教啊!
      

  8.   

    断言错误是不是没有加上
    #include "resource.h"
    试试看
      

  9.   

    如果忘记加#include "resource.h",则编译是不能通过的。
      

  10.   

    需要在
    stdafx.h里面加resource.h
    不过似乎问题和你的不一样