DaVilka,
Код:
hCore:= GetModuleHandle('core.dll');
L2MemAlloc:= GetProcAddress(hCore, '?GMalloc@@3PAVFMalloc@@A');
...
function L2MemoryAllocNetPacket: PNetworkPacket; register;
asm
push NetPacket
push $0C
mov edx, L2MemAlloc
mov ecx, [edx]
mov eax, [ecx]
mov edx, [eax]
call edx
end;
function L2MemoryAllocNetCmd(len: integer): Pointer; register;
asm
push NetCmd
push len
mov edx, L2MemAlloc
mov ecx, [edx]
mov edx, [ecx]
mov eax, [edx]
call eax
end;
procedure L2MemoryFreeNetPacket(pck: PNetworkPacket); stdcall;
asm
lea edi, pck
mov edx, L2MemAlloc
mov ecx, [edx]
mov eax, [ecx]
mov edx, [edi]
mov edx, [edx+8]
push edx
mov eax, [eax+8]
call eax
mov ecx, L2MemAlloc
mov ecx, [ecx]
mov eax, [edi]
mov edx, [ecx]
push eax
mov edx, [edx+8]
call edx
end;
...
var
np: PNetworkPacket;
begin
np:= L2MemoryAllocNetPacket;
np.id:= pck[0];
np.res:= 0;
np.size:= len - 1;
np.res2:= 0;
np.id2:= -1;
np.data:= L2MemoryAllocNetCmd(len - 1);
Move(pck[1], np.data[0], len - 1);
AddNetworkQueue(np);