CCfgSheet dlg("Configure",this);
if(IDOK==dlg.DoModal())
{
m_DataToSet.m_UpsConfig.csBatNum = dlg.m_UpsConfigPage.m_csBatNum;//这句报错
}
dlg是CPropertySheet
m_UpsConfigPage是CPropertyPage
csBatNum是CString类型
m_csBatNum绑定Edit控件的CString类型变量
if(IDOK==dlg.DoModal())
{
m_DataToSet.m_UpsConfig.csBatNum = dlg.m_UpsConfigPage.m_csBatNum;//这句报错
}
dlg是CPropertySheet
m_UpsConfigPage是CPropertyPage
csBatNum是CString类型
m_csBatNum绑定Edit控件的CString类型变量
解决方案 »
- 如何将CString对象转换为字符数组
- 急!!!!创建一个可以切换窗口/全屏的D3D窗口
- [100分-求助]:关于'streams.h'文件和"amcap",万能摄像头驱动程序的问题
- MFC中利用MSCOMM控件接收数据的问题(oncomm()函数是如何响应的)
- clistctrl InsertItem 触发事件
- 在视图中动态加载对话框
- 急!如何把BSTR 变成char*
- link错误 求救!100分!
- 本人用VC已经3,4年了,总觉它才是最懂得计算机人用的最好的东东,但最近总觉得没有什么用武之地,请教一下我如何才能重新找那种最初编程
- 如何在另一个全屏DirectX程序的窗口上画图?
- 向edit控件输出文本的问题
- 怎么向richedit控件中插入得到的图片或ICON
m_DataToSet.m_UpsConfig.bComType = dlg.m_UpsConfigPage.m_bComType;
却不会出错。
再从CPropertySheet取值。
m_DataToSet是DataToSet类型,可是这样怎么会出错呢?
typedef struct _UPSConfig
{
//UPS参数
BOOL bComType;
USHORT uComType;
BOOL bBatNum;
CString csBatNum;
}UPSConfig;typedef struct _DataToSet
{
UPSConfig m_UpsConfig;
......
}DataToSet;
调试看一下,m_UpsConfig的各项成员的值是否有效状态
memset(&m_DataToSet,0,sizeof(m_DataToSet));
删除这一句就可以了,可以为什么呢?
CString是个类对象,不是简单的结构,一般对象里会包含指向方法表的指针,你全部清零,意味着把这个指针也清掉了,对象调用成员方法时会内存访问越界,当然会出错。
对于对象初始化,不能简单调用memset的,一般只有结构体才可以这样做,呵呵
两种选择,一种是把CString csBatNum;改成系统内置类型,如字符串数组char csBatNum[50];但前提是你知道这个字符串的最大长度,这样就可按你的方法初始化。
另一种,专门写个类似的初始化函数,在里面分别对成员变量置初始值。