编程排错随记
1、打开包含ActiveX控件的对话框时出错。
在Win2000或者有开发环境的系统中(未具体区分测试),程序编译、运行均无问题;
在Win98或者没有开发环境的系统中(未具体区分测试),运行到打开对话框时出错。
原因及解决方法:程序使用Debug编译造成。改为Release版本后问题解决。
2、当有对话框正在打开时,程序退出时意外出错。
原因及解决办法:打开对话框时使用的是Domodal()方法。而在一个语句序列中,Domodal()往往不在最后,当窗口不关闭时,后面的语句不被执行。而直接退出程序时,那些语句没来得及执行,程序就退出了,造成意外。通过条件判断,将Domldal()放到一个语句序列最后,问题解决。
3、当有消息框打开时,程序退出时意外出错。
原因及解决办法:原因不明,将AfxMessageBox()改为MessageBox()后,问题解决。
4、使用了显式调用DLL库的程序退出时意外出错。
原因及解决办法:使用LoadLibrary()动态显式装入DLL库,使用FreeLibrary()释放时要注意,如果释放过早,可能造成后面系统自动释放资源时出错。可以干脆不使用FreeLibrary(),交由系统自己处理。
5、WIN98中使用标准的Windows库的项目调用MFC DLL时出错。
原因及解决办法:如果在Win98等系统中运行,MFC DLL编写有限制。比如资源ID号的大小,具体参见联机帮助。使用MFC项目调用标准WINDOWS库编译的DLL没问题。
6、DLL中函数调用,无参数时正确,有参数时失败。
原因及解决办法:调用约定不一致,要看DLL项目中的配置属性àC/C++à高级à调用约定。如:__cdecl,__stdcall,__fastcall。
7、尽量不要指针,可用数组代替。
8、StringTable如果部分删除,会造成静态MFC运行模式的错误,而动态MFC库模式没事。