读书人

C++Builder2010 哪位高手遇到过这种BU

发布时间: 2012-02-27 10:00:22 作者: rapoo

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

C/C++ code
#if defined(_DELPHI_STRING_UNICODE)    typedef UnicodeString        String;           //#else    typedef AnsiString           String;           //#endif
[解决办法]
应该不是unicode的问题
在2010里String默认是UnicodeString,而且AsString也是UnicodeString.

[解决办法]
MARK..关注

读书人网 >C++ Builder

热点推荐