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

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

編輯:Delphi

由於 RegQueryValueEx 函數的 Len 指定的是字節數,而不是字符數,所以 Unicode 版本中它的大小是實際需要大小的 2 倍,所以這樣的代碼:

Len := MAX_PATH;

if RegQueryValueEx(reg, PChar(Name), nil, nil, PByte(@Data[0]), @Len) = ERROR_SUCCESS

then

SetString(Result, Data, Len - 1) // Len includes #0

else

RaiseLastOSError;

應該換成下面這樣:

Len := MAX_PATH * SizeOf(Char);

if RegQueryValueEx(reg, PChar(Name), nil, nil, PByte(@Data[0]), @Len) = ERROR_SUCCES

then

SetString(Result, Data, Len div SizeOf(Char) - 1) // Len includes #0, Len contains the number of bytes

else

RaiseLastOSError;

CreateProcessW 函數

在 Unicode 版本的 CreateProcess 函數中,其行為和 ANSI 的版本略有不同。Unicode 的 CreateProcessW 會改變參數 lpCommandLine 傳入的數據,因此調用 CreateProcess / CreateProcessW 的時候,不可以給 lpCommandLine 賦值常量,或者是一個變量指向的常量,否則函數會拋出 Access violations 的異常。下面是錯誤的代碼:

// 傳入了一個 string 常量

CreateProcess(nil, 'foo.exe', nil, nil, False, 0,

nil, nil, StartupInfo, ProcessInfo);

// 傳入了一個常量表達式

const

cMyExe = 'foo.exe'

CreateProcess(nil, cMyExe, nil, nil, False, 0,

nil, nil, StartupInfo, ProcessInfo);

// 傳入了一個引用計數為 -1 的字符串:

const

cMyExe = 'foo.exe'

var

sMyExe: string;

sMyExe := cMyExe;

CreateProcess(nil, PChar(sMyExe), nil, nil, False, 0, nil, nil, StartupInfo, ProcessInfo);

LeadBytes 常量

早先的版本中 LeadBytes 常量包含了本地系統中所有可以作為雙字節字符 LeadByte 的列表,常常有這樣的代碼:

if Str[I] in LeadBytes then

現在你需要將它改成調用 IsLeaderChar 函數

if IsLeadChar(Str[I]) then

使用 TMemoryStream 類

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