Я не могу найти ничего в 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, но они уже есть!