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

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

編輯:Delphi

調用 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;

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