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

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

編輯:Delphi

接上文

依賴字符 Size 的代碼結構:

在 Tiburon 中,下列列表中列出的這些函數和特性依賴字符 Size,並且已經包含了一個“輕便”的版本,遷移代碼的時候只需要將列出的代碼遷移到後面提供的輕便版本即可。

SizeOf() 替換為 Length()

范例:

var

Count: Integer;

Buffer: array[0..MAX_PATH - 1] of Char;

begin

// 現有代碼 - 當 string = UnicodeString 的時候這段代碼是錯的

Count := SizeOf(Buffer);

GetWindowText(Handle, Buffer, Count);

// 正確的應該是下面這樣

Count := Length(Buffer); // <<-- Count 應該是 Chars 而不是 Bytes

GetWindowText(Handle, Buffer, Count);

end;

SizeOf 返回的是數組的字節數,而 GetWindowText 的 Counts 參數需要的是字符數,所以這裡需要把 SizeOf 換成 Length。

Move(... CharCount) 替換為 Move( ,,, CharCount * SizeOf(Char))

var

Count: Integer;

Buf1, Buf2: array[0..255] of Char;

begin

// 現有代碼 - 當 string = UnicodeString (char = 2 bytes) 時,下面的代碼是錯誤的

Count := Length(Buf1);

Move(Buf1, Buf2, Count);

// 正確的寫法應該是

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

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

Move(Buf1, Buf2, Count);

end;

由於 Length 返回的是字符數,而 Move 的 Count 參數需要的是字節數,所以應該用 SizeOf 或者 Length(Buf1) * SizeOf(Char) 替換 Length(Buf1)。

Stream 的 Read/Write 替換為 AnsiString, SizeOf(Char),或者使用 TEncoding 類

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