BCB6一个奇怪的Bug!
程序中使用了excelapplication等excel组件,当程序使用debug模式下编译时,一切正常,但当处于release模式下时,程序出现,下面错误:[C++ Error] MyXLS.cpp(43): E2027 Must take address of a memory location,[C++ Error] MyXLS.cpp(80): E2451 Undefined symbol 'e'
错误的语句是类似这样的语句:(凡是try语句都出错!)
try{
for(int i=1;i<=col;i++)
{
String s=TVariant(xlsDS->xlsSheet->Cells->get_Item(TVariant(rowid),TVariant(i)));
vs.push_back(s);
}
return true;
}catch(Exception &e)
{
logserver.addlog(e.Message,logWarn);
close();
}
错误指的是这一句:
}catch(Exception &e)
在Release下,清除了所有的obj,tds,csm,然后build all都无法解决。
注这一个程序原是bcb5的项目。在使用excel组件以外的地方使用try语句是无问题的。
还有的是:在relase模式下,会报
[C++ Warning] utilcls.h(1149): W8027 Functions containing do are not expanded inline
这可是borland自家写的语句呀,指的是这一句:
operator long*()
{
_ASSERTE(vt!= VT_UNKNOWN);//warning定在这里
_ASSERTE(vt!= VT_DISPATCH);
_ASSERTE(vt!= (VT_UNKNOWN|VT_BYREF));
_ASSERTE(vt!= (VT_DISPATCH|VT_BYREF));
if (vt == (VT_UI4|VT_BYREF)) return (long*)V_UI4REF(this);
else if (vt == VT_UI4) return (long*)&(V_UI4(this));
return NULL;
}
环境:
bcb6+update1