MFC的regular dll,我从资源里加入了一个对话框,并生成一个类,但是,在导出函数里使用了;同时也往dll里加入一个自定义类(没有基于任何类),并也在导出函数里使用了,这个dll导出函数如下:
CInputDlg dlg;
dlg.DoModal();
CForTest test;
return test.GetInfo();
编译通过(两个自己加的类都极其简单的)。但在使用的时候,对话框并没有出现。但是它的返回值是正确的(也就是应该这个自定义类工作正常)。为什么会这样呢?

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=543
      

  2.   

    再问一下:
    根据上面网址,加了句AFX_MANAGE_STATE(AfxGetStaticModuleState());就可以了
    为什么要用这句啊?
      

  3.   

    CString Fun()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CInputDlg dlg;
    dlg.DoModal();
    CForTest test;
    return test.GetInfo();
    }
      

  4.   

    AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState( ); 
    此函数在堆栈上构造AFX_MODULE_STATE类的实例pModuleState并对其赋值后将其返回。在AFX_MODULE_STATE类的构造函数中,该类获取指向当前模块状态的指针并将其存储在成员变量中,然后将pModuleState设置为新的有效模块状态。在它的析构函数中,该类将存储在其成员变量中的指针还原为存贮的前一个模块状态。 AFX_MANAGE_STATE( AFX_MODULE_STATE* pModuleState ) 
    该宏用于将pModuleState(指向包含模块全局数据也就是模块状态的AFX_MODULE_STATE结构的指针)设置为当前的即时作用空间中(the remainder of the immediate containing scope)的有效模块状态。在离开包含该宏的作用空间时,前一个有效的模块状态自动还原。AFX_MANAGE_STATE(AfxGetStaticModuleState());
    是自动切换当前模块状态,也可以通过使用AfxGetResourceHandle和AfxSetResourceHandle来手动切换当前模块状态。