C++Builder 2007 vs 2006 代码细节比较

小试了几个项目在由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 s = 3.1416;
Variant currVar 
=  s ;
Currency r 
=   6.15 ;
Currency  B 
=  currVar;
*=  r;

(2)  Currency 转换成字符串,必须使用 CurrToStr  (由于一些函数必须使用WideString参数)

//   2006  可以这样写
   Currency c = 3.1416;
Node->SetText(WideString(AnsiString(c ))) // _di_IXMLNode


//  2007  应该这样写

   Currency c = 3.1416;
Node->SetText(WideString(CurrToStr(c)));

2、TXMLDocument 组件 在 Win32 服务中不能动态创建与删除, 而在 Application 中则是正常的。

 

TXMLDOcument  * 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();
}

4、暂时只有这些小问题,如再发现,在这里继续.....

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值