Delphi 專案遷移到 Tiburon(Delphi2009,Delphi2010) 中的注意事項
阿新 • • 發佈:2019-01-30
呼叫 Read/ReadBuffer 方法的範例:
var
S: string;
L: Integer;
Stream: TStream;
Temp: AnsiString;
begin
// 現有程式碼- 當 string = UnicodeString 時它是不正確的
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L);
// 正確的 Unicode 寫法如下
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- Specify buffer size in bytes
//正確的 Ansi 寫法如下
Stream.Read(L, SizeOf(Integer));
SetLength(Temp, L); // <<-- 使用臨時的變數 AnsiString
Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- Specify buffer size in bytes
S := Temp; // <<-- 放寬 string 到 Unicode
end;
上面的解決方案依賴於您儲存在 Stream 中的字串的編碼格式,更好的讀取和轉換他們建議使用 TEncoding 類。
呼叫 Write/WriteBuffer 的範例:
var
S: string;
Stream: TStream;
Temp: AnsiString;
begin
// 現有程式碼 - 當 string = UnicodeString 時它是錯的
Stream.Write(Pointer(S)^, Length(S));
// 正確的讀取 Unicode 的程式碼
Stream.Write(Pointer(S)^, Length(S) * SizeOf(Char)); // <<-- Specify buffer size in bytes
// 正確的讀取 Ansi 的程式碼
Temp := S; // <<-- Use temporary AnsiString
Stream.Write(Pointer(Temp)^, Length(Temp) * SizeOf(AnsiChar));// <<-- Specify buffer size in bytes
end;
上面的解決方案依賴於您要儲存進 Stream 中的字串的編碼格式,建議使用 TEncoding 類來更好的對格式進行處理。
var
S: string;
L: Integer;
Stream: TStream;
Temp: AnsiString;
begin
// 現有程式碼- 當 string = UnicodeString 時它是不正確的
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L);
// 正確的 Unicode 寫法如下
Stream.Read(L, SizeOf(Integer));
SetLength(S, L);
Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- Specify buffer size in bytes
//正確的 Ansi 寫法如下
Stream.Read(L, SizeOf(Integer));
SetLength(Temp, L); // <<-- 使用臨時的變數 AnsiString
Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- Specify buffer size in bytes
S := Temp; // <<-- 放寬 string 到 Unicode
end;
上面的解決方案依賴於您儲存在 Stream 中的字串的編碼格式,更好的讀取和轉換他們建議使用 TEncoding 類。
呼叫 Write/WriteBuffer 的範例:
var
S: string;
Stream: TStream;
Temp: AnsiString;
begin
// 現有程式碼 - 當 string = UnicodeString 時它是錯的
Stream.Write(Pointer(S)^, Length(S));
// 正確的讀取 Unicode 的程式碼
Stream.Write(Pointer(S)^, Length(S) * SizeOf(Char)); // <<-- Specify buffer size in bytes
// 正確的讀取 Ansi 的程式碼
Temp := S; // <<-- Use temporary AnsiString
Stream.Write(Pointer(Temp)^, Length(Temp) * SizeOf(AnsiChar));// <<-- Specify buffer size in bytes
end;
上面的解決方案依賴於您要儲存進 Stream 中的字串的編碼格式,建議使用 TEncoding 類來更好的對格式進行處理。