#include "DownloadBmpDlg.h"
CDownloadBmpDlg* dlg;__declspec(dllexport) BOOL DLBMP_ShowDlg(HWND hWnd,int n_Port,CString str_ServIp,CString str_UserId,CString str_PassWord)
{ if ((n_Port < 5000) || (n_Port > 100000)){
return FALSE;
}
dlg = new CDownloadBmpDlg(NULL); dlg->hGoalWnd = hWnd;
dlg->str_ServIp = str_ServIp;
dlg->str_ServUserId = str_UserId;
dlg->str_ServPassWord = str_PassWord;
dlg->Create(IDD_DIALOG_DOWNLOADBMP,NULL);
dlg->ShowWindow(SW_HIDE);
dlg->n_ClientPort = n_Port;
dlg->StartDown(); return TRUE;
}__declspec(dllexport) BOOL DLBMP_CloseDlg(HWND hWnd)
{
dlg->CloseSocket();
dlg->DestroyWindow();
delete dlg;
return TRUE;
}在第一次dlg->Create(IDD_DIALOG_DOWNLOADBMP,NULL);的时候,dlg可以创建出来,可是我将dlg都delete后,在创建都会报错,具体在CreateIndirect时候出的问题。我看不太明白,哪位高手能指点一下,改怎么解决。最好是还没调用DLBMP_CloseDlg的时候能够继续create新的dlg。

解决方案 »

  1.   

    跟踪了,就在createIndirect这里
      

  2.   

    哦,只能new一次?那我怎么知道我已经new过了?
      

  3.   

    CDownloadBmpDlg* dlg = NULL;
    if(dlg==NULL)
    nEew one
    else
    don't new.
      

  4.   

    __declspec(dllexport) BOOL DLBMP_CloseDlg(HWND hWnd)
    {
    dlg->CloseSocket();
    dlg->DestroyWindow();
    delete dlg;
    return TRUE;
    }
    这里delete dlg后dlg的hWnd都变成0xfeeefeee了,根本没法重新赋值了,一赋值就报错了,更别说create了,我在delete dlg;前插入 dlg =NULL ;可是dlg->Create(IDD_DIALOG_DOWNLOADBMP,NULL);这句还是通不过。还是在
    BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)里面的
    BOOL bResult = CreateIndirect(hTemplate, pParentWnd, hInst);这句报错了。