答案 0 :(得分:3)
我在Windows API中找不到任何内容。但是,我知道你使用Delphi主要(或者至少很多)工作,所以这里有一个快速的Delphi函数:
function MAKELONGLONG(A, B: cardinal): UInt64; inline;
begin
PCardinal(@result)^ := A;
PCardinal(cardinal(@result) + sizeof(cardinal))^ := B;
end;
更快:
function MAKELONGLONG(A, B: cardinal): UInt64;
asm
end;
说明:在正常的register
调用约定中,前两个参数(如果基数大小)分别存储在EAX和EDX中。 (基数大小)结果存储在EAX中。现在,64位结果存储在EAX(低有效位,低地址)和EDX(更高有效位,高地址)中;因此我们需要将A
移至EAX并将B
移至EDX,但它们已经存在!
答案 1 :(得分:0)
我个人更喜欢C-macros
#define MAKE_i64(hi, lo) ( (LONGLONG(DWORD(hi) & 0xffffffff) << 32 ) | LONGLONG(DWORD(lo) & 0xffffffff) )