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、暫時只有這些小問題,如再發現,在這裏繼續.....

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章