小试了几个项目在由2006转到2007中编译,总的来说,编译速度是有了提升,但由于在编写代码的习惯问题,我将我所碰到的一些细节问题总结如下:
1、数据类型转换,2007 不如 2006 聪明, 特别是尽量小地使用变量,直接在计算式内嵌套函数时,如:
(1) Variant 数据(Currency 类型) 转换成 Currency
//
2006 可以这样写
Currency s = 3.1416;
Variant currVar
=
s
;
Currency r = 6.15 ;
Currency B = Currency(currVar) * r;
// 2007 应该这样写
Currency r = 6.15 ;
Currency B = currVar;
B *= r;
Currency r = 6.15 ;
Currency B = Currency(currVar) * r;
// 2007 应该这样写
Currency s = 3.1416;
Variant currVar
=
s
;Currency r = 6.15 ;
Currency B = currVar;
B *= r;
(2) Currency 转换成字符串,必须使用 CurrToStr (由于一些函数必须使用WideString参数)
//
2006 可以这样写
Currency c = 3.1416;
Node->SetText(WideString(AnsiString(c
)))
; // _di_IXMLNode
// 2007 应该这样写
// 2007 应该这样写
Currency c = 3.1416;
Node->SetText(WideString(CurrToStr(c)));
2、TXMLDocument 组件 在 Win32 服务中不能动态创建与删除, 而在 Application 中则是正常的。
TXMLDOcument
*
XML;
XML = new TXMLDOcument( this );
delete XML;
XML = new TXMLDOcument( this );
delete XML;
3、WinSock.hpp 与 Indy10 组件的声明严重冲突,解决办法,不使用 #include <WinSock.hpp>
当要取本机 IP 地址时。
WSAData GInitData;
//
2006 时使用 Winsock::TWSAData GInitData;
AnsiString cValue = " 127.0.0.1. " ;
try
... {
struct hostent *thisHost;
struct in_addr in;
char Buffer[64];
WSAStartup(2, &GInitData);
gethostname(Buffer, sizeof(Buffer));
thisHost = gethostbyname(Buffer);
memset(&in,sizeof(in),0);
int i = -1;
while (thisHost->h_addr_list[i+1] != NULL)
...{
i++;
in.s_addr=*((unsigned long *)thisHost->h_addr_list[i]);
}
if (i<0) cValue = "127.0.0.1.";
else cValue = AnsiString(inet_ntoa(in)) + ".";
WSACleanup();
}
catch (...)
... {
WSACleanup();
}
AnsiString cValue = " 127.0.0.1. " ;
try
... {
struct hostent *thisHost;
struct in_addr in;
char Buffer[64];
WSAStartup(2, &GInitData);
gethostname(Buffer, sizeof(Buffer));
thisHost = gethostbyname(Buffer);
memset(&in,sizeof(in),0);
int i = -1;
while (thisHost->h_addr_list[i+1] != NULL)
...{
i++;
in.s_addr=*((unsigned long *)thisHost->h_addr_list[i]);
}
if (i<0) cValue = "127.0.0.1.";
else cValue = AnsiString(inet_ntoa(in)) + ".";
WSACleanup();
}
catch (...)
... {
WSACleanup();
}
4、暂时只有这些小问题,如再发现,在这里继续.....