C++Builder2010 谁遇到过这种BUG?(付源码)
int __fastcall Fun1(String dcbids,int xcmd,double delcount,String delYY,int cs1,bool check,int checksl1)
{
ShowMessage(dcbids);
}
//-------------------------------------------------------------------
void __fastcall TForm9::BitBtn1Click(TObject *Sender)
{
String ee;
TADODataSet *ADOD1=new TADODataSet(NULL);
ADOD1->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=.";
ADOD1->Close();
ADOD1->CommandText="SELECT TOP 1 name,id FROM syscolumns";
ADOD1->Open();
ShowMessage(ADOD1->FieldByName("name")->AsString);
//直接显示正常
ee= ADOD1->FieldByName("name")->AsString;
Fun1(ee ,0,-1,"fff",0,false,0);
//用String传递正常
Fun1(ADOD1->FieldByName("name")->Value ,0,-1,"fff",0,false,0);
//用Value正常
Fun1(ADOD1->FieldByName("name")->AsString ,0,-1,"fff",0,false,0);
//唯独用AsString直接传参异常
ShowMessage(IntToStr(StrToIntDef(ADOD1->FieldByName("id")->AsString,-1)));
//有些情况id明明是个>0数字,却返回-1,看来以上问题都出在 AsString 上
ADOD1->Close();
delete ADOD1;
}
因为程序中使用了大量的AsString 所以不知道哪里还存在隐患,请各位高人指点指点!
[解决办法]
我在這個帖子的19、20、 21 樓已經貼出這樣的問題了
這個問題從2009 就開始出現了
http://topic.csdn.net/u/20091231/08/78fc2eed-aa6b-42bb-9deb-83775e94cd9c.html
如果定义了_DELPHI_STRING_UNICODE,则为Unicode编码,如果没有定义,则采用AnsiString了编码
這樣的話 你得到的ADOD1->FieldByName("name")->AsString是UnicodeString,
而你的函數的代入得是AnsiString類型 所以會出問題了
//樓主請看sysmac.h
#if defined(_DELPHI_STRING_UNICODE) typedef UnicodeString String; //#else typedef AnsiString String; //#endif
[解决办法]
应该不是unicode的问题
在2010里String默认是UnicodeString,而且AsString也是UnicodeString.
[解决办法]
MARK..关注