在C**Dlg类中不能添加任何变量 否则窗口无法显示

时间:2022-12-12 16:25:49
如题,是基于对话框的,在生成的C**Dlg类中只要我一添加成员变量,程序就错误。而其中只要我添加好想CButton、CDialog之类的变量,程序启动的时候对话框更本就没有显示出来;而如果我在C**Dlg类中添加好像 CString之类的变量,程序运行就会显示 内存不能Written 的错误。
真的不知道是什么原因,在不添加变量之前,一切都是正常的,就是在类中添加变量之后就错误了。。

19 个解决方案

#1


 内存不能Written 的错误.
哪个指针出错了

#2


又是VC6.0的吧?如果是的话,那就有可能了,我也遇到过这个BUG,换个高级点的编译器或者找个补丁啥的

#3


不会吧。。编译器问题?在其他地方第一同样的变量时没有问题的。就好像在InitDialog函数里面定义变量都不会有问题,就只是在C**Dlg类中添加成员变量,无论什么变量,编译不会有问题的,就是程序运行就有问题了。

#4


就是了,这样的问题遇到过了,当年我还傻傻地在这里提问呢

#5


给点代码看看

#6


在vc 中 调试 运行 Debug版本 找到 错误所在位置,或者在可疑出 GetLastError()

这么猜  没法猜到

#7


代码太长了,而且在MFC中,涉及的文件太多。

问题出现的情况有两种:
一种是在类中添加成员变量如:CButton,CDialog之类的,出现的问题就在这个函数中:

BOOL CMyRecordApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
//  of your final executable, you should remove from the following
//  the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CMyRecordDlg dlg;
m_pMainWnd = &dlg;
// spl.ShowSplashScreen(false);
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with Cancel
}

// Since the dialog has been closed, return FALSE so that we exit the
//  application, rather than start the application's message pump.
return FALSE;
}

错误是这里的代码:
CMyRecordDlg dlg;
m_pMainWnd = &dlg;
// spl.ShowSplashScreen(false);
int nResponse = dlg.DoModal();

运行到dlg.DoModal()的时候就错了,就是说对话框显示不了。可是这个错误就只是程序没反应,没有显示错误信息。


第二个错误:

这个错误出现的原因是在C**Dlg中添加如 CString 之类的成员变量。出现错误的代码同上面一样,不过这时候有出现错误信息,错误信息提示".......Access Violation.“

#8


该回复于2011-03-10 09:44:47被版主删除

#9


你现在贴出来的代码就是MFC自动生成的原原本本的代码啊,这代码是没错的。你确定程序出错点就在这??你把你自己写的代码贴出来给大家看看才能帮你找出错误啊。

#10


引用 4 楼 fishion 的回复:
就是了,这样的问题遇到过了,当年我还傻傻地在这里提问呢


还好我没遇到过,现在又知道有这样的bug了,所有不会再傻傻的提问了,,,,(*^__^*) 嘻嘻……

#11


什么版本的VC6,我使用VC6怎么没遇到过这种问题?~~~

#12


不行就换成VS2008!!!

#13


你这个问题是在每个工程都是这样吗?你试试别的工程,或者你开始不注意删除了哪里

#14


有些变量没关联好。

#15


你现debug 下打开call stack 看看函数调用堆站,找到出错的地方

#16


以前遇到过,不能添加成员变量,你就先用个全局变量代替吧。或者你重新建一个工程。

#17


应该是编译器的问题 你重新做个工程 

#18


呵呵,没办法,VC 6.0真的不行。。同样的程序,在VS 2008下成功运行。。谢谢各位了。。

#19


怎么解决的啊。。。。
除了换VC6.0没其他方法???

#1


 内存不能Written 的错误.
哪个指针出错了

#2


又是VC6.0的吧?如果是的话,那就有可能了,我也遇到过这个BUG,换个高级点的编译器或者找个补丁啥的

#3


不会吧。。编译器问题?在其他地方第一同样的变量时没有问题的。就好像在InitDialog函数里面定义变量都不会有问题,就只是在C**Dlg类中添加成员变量,无论什么变量,编译不会有问题的,就是程序运行就有问题了。

#4


就是了,这样的问题遇到过了,当年我还傻傻地在这里提问呢

#5


给点代码看看

#6


在vc 中 调试 运行 Debug版本 找到 错误所在位置,或者在可疑出 GetLastError()

这么猜  没法猜到

#7


代码太长了,而且在MFC中,涉及的文件太多。

问题出现的情况有两种:
一种是在类中添加成员变量如:CButton,CDialog之类的,出现的问题就在这个函数中:

BOOL CMyRecordApp::InitInstance()
{
AfxEnableControlContainer();

// Standard initialization
// If you are not using these features and wish to reduce the size
//  of your final executable, you should remove from the following
//  the specific initialization routines you do not need.

#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif

CMyRecordDlg dlg;
m_pMainWnd = &dlg;
// spl.ShowSplashScreen(false);
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
//  dismissed with Cancel
}

// Since the dialog has been closed, return FALSE so that we exit the
//  application, rather than start the application's message pump.
return FALSE;
}

错误是这里的代码:
CMyRecordDlg dlg;
m_pMainWnd = &dlg;
// spl.ShowSplashScreen(false);
int nResponse = dlg.DoModal();

运行到dlg.DoModal()的时候就错了,就是说对话框显示不了。可是这个错误就只是程序没反应,没有显示错误信息。


第二个错误:

这个错误出现的原因是在C**Dlg中添加如 CString 之类的成员变量。出现错误的代码同上面一样,不过这时候有出现错误信息,错误信息提示".......Access Violation.“

#8


该回复于2011-03-10 09:44:47被版主删除

#9


你现在贴出来的代码就是MFC自动生成的原原本本的代码啊,这代码是没错的。你确定程序出错点就在这??你把你自己写的代码贴出来给大家看看才能帮你找出错误啊。

#10


引用 4 楼 fishion 的回复:
就是了,这样的问题遇到过了,当年我还傻傻地在这里提问呢


还好我没遇到过,现在又知道有这样的bug了,所有不会再傻傻的提问了,,,,(*^__^*) 嘻嘻……

#11


什么版本的VC6,我使用VC6怎么没遇到过这种问题?~~~

#12


不行就换成VS2008!!!

#13


你这个问题是在每个工程都是这样吗?你试试别的工程,或者你开始不注意删除了哪里

#14


有些变量没关联好。

#15


你现debug 下打开call stack 看看函数调用堆站,找到出错的地方

#16


以前遇到过,不能添加成员变量,你就先用个全局变量代替吧。或者你重新建一个工程。

#17


应该是编译器的问题 你重新做个工程 

#18


呵呵,没办法,VC 6.0真的不行。。同样的程序,在VS 2008下成功运行。。谢谢各位了。。

#19


怎么解决的啊。。。。
除了换VC6.0没其他方法???

#20