gpt4 book ai didi

delphi - 如何修复 "E2033 Types of actual and formal var parameters must be identical"编译器错误?

转载 作者:行者123 更新时间:2023-12-02 05:01:02 24 4
gpt4 key购买 nike

我用过RRUZ的solution改善禁用图像的外观。然而,以下摘录作为示例:

procedure HookProc(Proc, Dest: Pointer; var BackupCode: TXRedirCode);
var
n: DWORD;
Code: TXRedirCode;
begin
Proc := GetActualAddr(Proc);
Assert(Proc <> nil);
if ReadProcessMemory(GetCurrentProcess, Proc, @BackupCode, SizeOf(BackupCode), n) then
begin
Code.Jump := $E9;
Code.Offset := PAnsiChar(Dest) - PAnsiChar(Proc) - SizeOf(Code);
WriteProcessMemory(GetCurrentProcess, Proc, @Code, SizeOf(Code), n);
end;
end;

在 Delphi 2007 中运行良好,但是当我在 Delphi XE10 中使用它时,我得到了

E2033 Types of actual and formal var parameters must be identical

调用ReadProcessMemory和WriteProcessMemory时

据我所知,类型是相同的。谁能告诉我需要改变什么?

最佳答案

E2033 Types of actual and formal var parameters must be identical

documentation说:

For a variable parameter, the actual argument must be of the exact type of the formal parameter.

换句话说,当您传递给 var 形参的参数的类型与函数声明中的类型不同时,就会遇到此错误。

要解决这个问题,第一步是找到您正在调用的函数的声明。然后您需要将其参数列表与您传递的参数进行比较。

就您而言,这两个函数位于 Winapi.Windows.pas 中(IDE 悬停提示会告诉您这一点),如下所示:

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

唯一的 var 参数是每个函数的最终参数,它可以立即查明问题。但更一般地说,如果一个函数有多个 var 参数,那么您必须依次考虑每个参数。

这两个函数的最终参数现在具有 SIZE_T 类型。您引用的代码使用DWORD。更改传递给 SIZE_T 的变量类型,即可解决问题。

关于delphi - 如何修复 "E2033 Types of actual and formal var parameters must be identical"编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36714980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com