接上文
依賴字符 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 類