STDMETHODIMP CO562634::ShowWindow()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // 这句你有吗?

 if( m_pMyDialog != NULL )
 {
 m_pMyDialog->DestroyWindow();
 delete m_pMyDialog;
 }
 m_pMyDialog = new CMyDialog();
 m_pMyDialog->Create(IDD_DIALOG1);
 m_pMyDialog->ShowWindow(SW_SHOW);  return S_OK;
}

解决方案 »

  1.   

    注意设定当前的资源句柄:HINSTANCE hInst = AfxGetResourceHandle();
    AfxSetResourceHandle(GetModuleHandle( "lm_st2d.dll" ));//你要调用的dll库
    CDlgStlibStandardData dlg;
    dlg.m_st2d = st2d;
    if (dlg.DoModal() == IDOK)
    {
    ...

    AfxSetResourceHandle(hInst);
      

  2.   

    lockriver(张锁江)????????
    红地技术有限公司,你把金银花的代码贴出来不怕给人扁嘛?
      

  3.   

    我这个dll是通常形势的静态DLL,并且使用的是隐式连接调用。在DLL中使用了
    AfxEnableControlContainer()函数后,在testDLL主程序中加一个对话框,并
    先打开主程序的对话框,然后关闭这个对话框,调用动态连接库,就能够打开连接库中的对话框,不知道是什么原因,我想直接打开dll中的对话框,不知道要做何修改?
      

  4.   

    GetModuleHandle( "lm_st2d.dll" )
    这个可以通过DllMain得到,或者如果是ATL project, 可以通过_Module.GetModuleInstance()来获得,不用给定名字
      

  5.   

    重载 Create
    BOOL classX::Create(CWnd *pParentWnd)
    {
      m_lpszTemplateName=NULL;
      HRSRC hResource = ::FindResource(yourDLL.hModule, MAKEINTRESOURCE(IDD), RT_DIALOG);
      m_hDialogTemplate = LoadResource(yourDLL.hModule, hResource);
         BOOL bResult = CreateIndirect(m_hDialogTemplate, pParentWnd, yourDLL.hModule);
      FreeResource(m_hDialogTemplate);
         return bResult;
    }
      

  6.   

    好吧,这样处理:
    在接口函数中
    CoInitialize(NULL);
    dlg.DoModal();
    CoUninitialize();
    这样你也可以用activex控件了。AfxEnableControlContainer还是要用
      

  7.   

    没有加CoInitialize(NULL); 可能性大点