关于dialog的创建。失败原因求解。。。 在debug环境下,bool ret = m_dlg.Create(IDD_DIALOG1); 返回是成功的。 在release环境下,返回却是失败的。实在没想到原因,所以求助各位了sf附相关代码dialogcreat 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 bool ret = m_dlg.Create(IDD_DIALOG1);messagebox 看ret的值! bool ret = m_dlg.Create(IDD_DIALOG1, this); 起初我认为是不是资源文件里#define IDD_DIALOG1 5000#define IDC_COOMONITOR1 5000这俩值有问题,不过修改后还是不行。 同样的文件,debug能跑,release不能,一时想不到问题在哪儿 错误 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 我是在线程里创建这个dialog的 所以这里的this是线程的指针。不过在创建前我切换了状态 AfxSetResourceHandle(dll_hInstance); 这里this应该不能用 Debug下F11进入看看是哪里失败了 你启UI线程?bool ret = m_dlg.Create(IDD_DIALOG1); 如果是工作线程,即使你创建成功了,对话框也不会显示的 Debug时可以创建成功,所以跟踪不到 是界面线程 不是工作线程 debug时可以创建成功 release时不行 谁说Release就不能断点跟踪了? Debug时将工程属性:MFC的使用 由在共享dll中使用MFC 改成静态使用 dialog的创建也返回失败。 我感觉你这样写好点:bool ret = m_dlg.Create(IPMDialog::IDD_DIALOG1);或者可以看看你的对话框类的初始化是不是有什么问题 http://blog.csdn.net/lionzl/article/details/7238093搞定了 原因如上 谢谢大家的回帖 求助,AfxBeginThread 创建的线程,为何执行的顺序有问题呢? 简单聊天室客户端连接不到服务器 TCP/IP连接中断 VC++(VOIP)各位高人帮忙啊`` 怎么样才能使控件位置随着对话框大小的变化而按比例变化 如何获取工程所在的目录 (SQL语句)如何判断excel文件中存在某一sheet (aaa) 怎么改变chm格式的电子书里字体大小,我这里看的很小,很不爽~~~~~ CRichEditCtrl滚动条的移动问题~~~~~急急急急急急急急急急~~~在线等~~~~ 怎样在屏幕上显示文本?请大虾指点 音视频处理 MFC结合SQL,做一个小小的系统
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
#define IDC_COOMONITOR1 5000这俩值有问题,不过修改后还是不行。 同样的文件,debug能跑,release不能,一时想不到问题在哪儿
错误 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
bool ret = m_dlg.Create(IDD_DIALOG1); 如果是工作线程,即使你创建成功了,对话框也不会显示的
bool ret = m_dlg.Create(IPMDialog::IDD_DIALOG1);
或者可以看看你的对话框类的初始化是不是有什么问题