1. 程式人生 > >delphi7與XE的變數與函式的改變

delphi7與XE的變數與函式的改變

跟往常一樣拿著delphi7老程式放在delphi XE中編譯發現一些問題總結

1.Pchar型別報錯問題

[dcc32 Error]XXX.pas(1299): E2010 Incompatible types: 'PAnsiChar' and 'PWideChar'

Delphi中有PChar,PWideChar,PAnsiChar三種形式在。在Delphi2010之前Pchar型別預設是PAnsiChar,在Delphi2010之後Pchar型別預設是PWidechar。宣告型別要具體指定是PAnsiChar還是PWideChar了。

2.ReadPricessMemory和WriteProcessMemory等一些api函式引數報錯問題

[dcc32 Error]XXX.pas(724): E2033 Types of actual and formal var parameters must be identical

在 Delphi Xe中 ReadProcessMemory 和 WriteProcessMemory等一些api的最後一個引數由原來的 var lpNumberOfBytesRead: DWORD 變為了一個指標按他的提示是 type void@

function WriteProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;nSize: SIZE_T; var lpNumberOfBytesWritten: SIZE_T): BOOL; stdcall;  

function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;nSize: SIZE_T; var lpNumberOfBytesRead: SIZE_T): BOOL; stdcall; 

第一個引數不能是 THandle無型別指標,THandle仍然是 Cardinal無符號整型或者THandle型別;第三個引數是個指標型別需要用@取變數地,而最後一個引數必須為THandle型別,使用 Cardinal無符號整型在delphi XE會報錯。

3.StrPas函式報錯問題

[dcc32 Error] uXHPub.pas(732): E2251 Ambiguous overloaded call to 'StrPas'

用Pchar函式替換StrPas函式即可。