作为一名程序员,相信大家常听到这句话:编译时候的警告要和错误一样对待!
可是有些警告并不影响程序的正确性与健壮性,而且似乎无法解决这种警告!这可能算是编译器的bug吧。
1:这个可算是最常见的多余的警告了,相信大家都知道,那就是在ADO数据库编程的时候:
warning C4146: unary minus operator applied to unsigned type, result still unsigned(总共两个)
好在现在vc++.net已去掉了这个警告。
另外插一句,在ActiveX中用ADO,必需要去掉stdafx.h中的:
#include <afxdb.h> // MFC database classes
#include <afxdao.h> // MFC DAO database classes
两行,别看这个问题小,可是对于初用ADO者可能会省掉很多不必要的麻烦。2:在做MFC ActiveX编程时,如果你在OnCreate()函数中用了OnActivateInPlace(TRUE,NULL);(注)函数,则在用ActiveX Control Test Container做测试的时候会causes an assert,这也是不用理会的。注:OnActivateInPlace(TRUE,NULL);这个函数可有用了,如果你的ActiveX控件在IE中用时接收不到一些按键的话(在PreTranslateMessage也不一定能解决的),就要考虑用它了。关于接收某些按键的问题我在csdn中发了几贴,也没问出结果来,后来在问专家网上找到点线索,最后到微软KB 168777,终于找到解决方法,就是加上这个函数,这个函数在包括现在的msdn.net 2003中也找不到它,压根就没有这个词!而且大家也看到了,这个函数有两个参数,可是他们是什么意思,可取什么值,我现在还不知道,只能抄KB上的,就是(TRUE,NULL),那位如果有更详细的资料不防说一说啊!说到ActiveX Control Test Container,给大家介绍另一个工具,和它功能差不多,这是我同事机器上的,前几天我弄丢了,在csdn中问了好久也没人回过,估计还有人不知道吧,这个工具是用来给控件生成网页的(VB有这个功能,VC没有,刚好可以用这个工具来代替),全名叫:Microsoft ActiveX Control Pad,安装文件叫Setuppad.exe,安装出来生成的可执行文件叫PED.exe,名字的来历搞不懂!
微软has established an online newsgroup for this product,for peer-to-peer support only接着上面的问题2说,我用这个东东打开ActiveX的时候,比用ActiveX Control Test Container更惨,ActiveX Control Test Container只是causes an assert,而PED则完全崩溃,差点死机!为了这个问题我没少花时间,也在csdn上问了,可是没有一个人说出了有关于OnActivateInPlace(TRUE,NULL);这个函数的问题,我差点气晕了,心想这个软件怎么发布呢,虽然在IE中用时没问题,但在两个测试工具
中均无法通过,最后还是在KB中找到答案:(这个KB我早就看了,只是下面这句话在角落里,以前没看见,晕!)
Calling OnActiveInPlace() in WM_CREATE causes an assert when the control is hosted in Test Container. 
The assert is bogus and can be ignored. 
终于放下心中的石头,所以这个assert也应该算是可ignore的错误了,故发上来,希望对不知道这个问题的高手一点帮助!
另外我对上面KB中的那句话说明一下,说的是causes an assert,但表现出来并不一定是,如在在release版中(debug版中未试),并不是弹出一个对话框说程序执行非法操作,或是断言错误,而表现是当关闭ActiveX Control Test Container后,控件没有得到关闭,以至于要想对这个ocx文件操作(如删除、移动、重新编译等)不成功,只有注销后才行。