程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 現有Delphi項目遷移到Tiburon中的注意事項(6)

現有Delphi項目遷移到Tiburon中的注意事項(6)

編輯:Delphi

上面的解決方案依賴於您要存儲進 Stream 中的字符串的編碼格式,建議使用 TEncoding 類來更好的對格式進行處理。

FillChar(, , ) 如果采用 #0 填充, 替換為 * SizeOf(Char);如果填充其它字符,替換為 StringOfChar 函數

范例:

var

Count: Integer;

Buffer: array[0..255] of Char;

// 本文轉自 C++Builder研究 - http://www.ccrun.com/article.ASP?i=1052&d=155e7c

begin

// 現有代碼 - 當 string = UnicodeString ( char = 2 字節) 時,這段代碼是錯的

Count := Length(Buffer);

FillChar(Buffer, Count, 0);

// 正確的代碼應該寫作下面這樣

Count := SizeOf(Buffer);        // <<-- Specify buffer size in bytes

Count := Length(Buffer) * SizeOf(Char); // <<-- Specify buffer size in bytes

FillChar(Buffer, Count, 0);

end;

Length 返回的是字符數,而 FillChar 的 Count 參數需要的是字節數,所以必須用 SizeOf 替換 Length,或者使用 Length * SizeOf(Char)。

另外,需要注意的是,Tiburon 中 Char 等於 2 個字節,FillChar 填充的時候確是按照 Bytes 來計算的,所以,下面的代碼

var

Buf: array[0..32] of Char;

begin

FillChar(Buf, Length(Buf), #9);

end;

並不是向目標中填充 $09,而是 $0909,要得到正確的數值,應該改寫成下面這樣:

var

Buf: array[0..32] of Char;

begin

StrPCopy(Buf, StringOfChar(#9, Length(Buf)));

...

end;

GetProcAddress(, ) 

由於 GetProcAddres 沒有對應的 *W (Unicode) 版本的 API,所以只能使用下面的代碼來正確調用它:

procedure CallLibraryProc(const LibraryName, ProcName: string);

var

Handle: THandle;

RegisterProc: function: HResult stdcall;

begin

Handle := LoadOleControlLibrary(LibraryName, True);

@RegisterProc := GetProcAddress(Handle, PAnsiChar(AnsiString(ProcName)));

end;

RegQueryValueEx 函數

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved