从 C++ Builder XE 换回 2010 了,XE 的 BUG 无法处理。
发现 C++ Builder XE 两个 BUG,其中第一个无法忍受,第二个可以找别的函数代替。
一. try...catch 某些情况下不好用了,无法捕获错误
也许 Embarcadero 把这些错误处理改变了方式,但是没找到任何有关的说明,目前情况就是XE无法处理这些异常。
1. XE处理日期的函数,FormatDateTime,DecodeDateTime,DayOf 等,如果日期无效,程序运行时会弹错误窗口,这个错误无法捕获,无法控制程序弹窗,但是在以往版本就没问题,例如:
try
{
FormatDateTime(1e111);
}
catch(...)
{
}
2. XE整数异常无法捕获,但是以往版本就没问题,例如:
try
{
int a = 0;
Caption = 1/a;
}
catch(...)
{
}
二. 几个字符串转 long long 型的函数无法得到正确的结果,而在以往版本就没问题:
1. long long strtoll(const char * __s, char * *__endptr, int __radix);
2. unsigned long long strtoull(const char * __s, char * *__endptr, int __radix);
3. long long wcstoll(const wchar_t * __s, wchar_t * *__endptr, int __radix);
4. unsigned long long wcstoull(const wchar_t * __s, wchar_t * *__endptr, int __radix);
例如:
char *string = "12345678900", *endptr;
long long llnumber = strtoll(string,&endptr,0);
printf("%s=%Ld\n",string,llnumber);
在2010里面运行,就得到结果 12345678900 但是在 XE 里面运行,得不到正确结果。