我在 Windows API 中找不到任何内容。然而,我确实知道您主要(或者至少是很多)使用 Delphi,所以这里有一个快速的 Delphi 函数:
function MAKELONGLONG(A, B: cardinal): UInt64; inline;
begin
PCardinal(@result)^ := A;
PCardinal(cardinal(@result) + sizeof(cardinal))^ := B;
end;
Run Code Online (Sandbox Code Playgroud)
甚至更快:
function MAKELONGLONG(A, B: cardinal): UInt64;
asm
end;
Run Code Online (Sandbox Code Playgroud)
说明:在正常的register调用约定中,前两个参数(如果是基数大小)分别存储在 EAX 和 EDX 中。(基数大小的)结果存储在 EAX 中。现在,64位结果存储在EAX(较低有效位,低地址)和EDX(较高有效位,高地址)中;因此我们需要转移A到 EAX 和BEDX,但它们已经在那里了!
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |