在debug环境下,bool ret = m_dlg.Create(IDD_DIALOG1);  返回是成功的。 
在release环境下,返回却是失败的。
实在没想到原因,所以求助各位了sf附相关代码dialogcreat

解决方案 »

  1.   

    m_dlg的定义:IPMDialog m_dlg;
    IPMDialog类:class IPMDialog : public CDialog
    {
    DECLARE_DYNAMIC(IPMDialog)
    DECLARE_EVENTSINK_MAP()public:
    IPMDialog(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~IPMDialog();// 对话框数据
    enum { IDD = IDD_DIALOG1 };protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    //自定义消息
        afx_msg LRESULT IPM_Init(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT IPM_Cleanup(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT IPMDialog::IPM_Arm(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT IPMDialog::IPM_GetDeviceState(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT IPMDialog::IPM_GetAlarmState(WPARAM wParam, LPARAM lParam);
        afx_msg LRESULT IPMDialog::IPM_ClearAlarm(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT IPMDialog::IPM_ByPass(WPARAM wParam, LPARAM lParam);
    DECLARE_MESSAGE_MAP()public:
    CTjtyAlmIPM23* m_pModule;
    CCoomonitor1 m_coomonitor;

    void SetParameter(void* pParam);

    IPMAddr* __fastcall IPMDialog::IPM_AddrFromIP(char *ip);
    IPMAddr* __fastcall IPMDialog::IPM_AddrFromMAC(char *mac); void DeviceConnectedCoomonitor1(LPCTSTR strMac);
    void DeviceDisConnectedCoomonitor1(LPCTSTR strMac);
    void ArmReportCoomonitor1(LPCTSTR strMac, LPCTSTR strTime, long lPlayback, long lArmed, long lUser);
    void PanelStatusCoomonitor1(LPCTSTR strMac, LPCTSTR strTime, long lPlayback, long zt, long ZoneBit);
    void NewAlarmCoomonitor1(LPCTSTR strMac, LPCTSTR strTime, long lPlayback, long lZone, long lState);
    };
     Resource.h#define IDD_DIALOG1                     5000
    #define IDC_COOMONITOR1                 5000
    #define IDD_DIALOG2                     5003// Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        5004
    #define _APS_NEXT_COMMAND_VALUE         32771
    #define _APS_NEXT_CONTROL_VALUE         5001
    #define _APS_NEXT_SYMED_VALUE           5000
    #endif
    #endif
      

  2.   

    bool ret = m_dlg.Create(IDD_DIALOG1);messagebox 看ret的值!
      

  3.   

    bool ret = m_dlg.Create(IDD_DIALOG1, this);
      

  4.   

    起初我认为是不是资源文件里#define IDD_DIALOG1                     5000
    #define IDC_COOMONITOR1                 5000这俩值有问题,不过修改后还是不行。  同样的文件,debug能跑,release不能,一时想不到问题在哪儿
      

  5.   


    错误 6 error C2664: “BOOL CDialog::Create(LPCTSTR,CWnd *)”: 不能将参数 2 从“IPMThread *const ”转换为“CWnd *” c:\work\svn\hostsdk\trunk\vs_sdk_code\tjtyalm\tjtyalm\ipmthread.cpp 27
      

  6.   

    我是在线程里创建这个dialog的  所以这里的this是线程的指针。不过在创建前我切换了状态  AfxSetResourceHandle(dll_hInstance);  这里this应该不能用   
      

  7.   

    Debug下F11进入看看是哪里失败了
      

  8.   

    你启UI线程?
    bool ret = m_dlg.Create(IDD_DIALOG1);  如果是工作线程,即使你创建成功了,对话框也不会显示的
      

  9.   

    Debug时可以创建成功,所以跟踪不到
      

  10.   

    是界面线程  不是工作线程  debug时可以创建成功  release时不行
      

  11.   

    谁说Release就不能断点跟踪了?
      

  12.   

    Debug时将工程属性:MFC的使用 由在共享dll中使用MFC 改成静态使用   dialog的创建也返回失败。
      

  13.   

    我感觉你这样写好点:
    bool ret = m_dlg.Create(IPMDialog::IDD_DIALOG1);
    或者可以看看你的对话框类的初始化是不是有什么问题
      

  14.   

    http://blog.csdn.net/lionzl/article/details/7238093搞定了 原因如上  谢谢大家的回帖