gpt4 book ai didi

delphi - 如何从Delphi XE5调用GetProcessAffinityMask

转载 作者:行者123 更新时间:2023-12-01 19:17:07 27 4
gpt4 key购买 nike

我尝试使用下面的代码片段在 Windows api 中调用 GetProcessAffinityMask。

var 
procaffmask,
sysaffmask : DWord;
begin
GetProcessAffinityMask(GetCurrentProcess, procaffmask, sysaffmask);
end;

编译后我收到以下错误消息......

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

API 调用的 C++ 语法如下:

BOOL WINAPI GetProcessAffinityMask(
_In_ HANDLE hProcess,
_Out_ PDWORD_PTR lpProcessAffinityMask,
_Out_ PDWORD_PTR lpSystemAffinityMask
);

然后我将DWORD更改为PDWORD,但这并没有解决问题。

谁能告诉我如何解决这个问题?我在互联网上看到不使用指针的 Delphi 代码示例。

最佳答案

下面是 Delphi 的 Winapi.Windows 单元中 GetProcessAffinityMask() 的声明:

function GetProcessAffinityMask(hProcess: THandle;
var lpProcessAffinityMask, lpSystemAffinityMask: DWORD_PTR): BOOL; stdcall;

DWORDDWORD_PTR 是不同的数据类型。 DWORD_PTR 不是“指向 DWORD 的指针”,它实际上是“指针大小的 DWORD”(在 32 位系统上为 4 个字节,在 64 位系统上为 8 个字节)。而 DWORD 在 32 位和 64 位系统上始终为 4 个字节。 Microsoft 使用 P 前缀表示指向类型的指针,并使用 _PTR 后缀表示类型本身取决于指针的字节大小。

Delphi 声明使用 var 参数,因此您必须完全匹配数据类型:

var 
procaffmask,
sysaffmask : DWORD_PTR;
begin
GetProcessAffinityMask(GetCurrentProcess, procaffmask, sysaffmask);
end;

即使您对 C++ 声明的引用也表明参数是 PDWORD_PTR(指向 DWORD_PTR 的指针)。

关于delphi - 如何从Delphi XE5调用GetProcessAffinityMask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767445/

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