Hi,
ich habe grade folgendes Problem:
1. Folgende Funktion funktioniert ohne Fehler wenn Sie in der gleichen
Unit steht.
Delphi-Quellcode:
function get_x(pid: Integer; offset_base: DWord; offset_xreg: Dword = $7C; offset_xpos: DWord = $78; Divider: Double = 10.0): Integer;
var
xOffsetInt, BaseAddress : DWord;
xRegionFloatPtr : ^Single;
xRegionFloat : Single;
xRegionBase : Longint;
hProcess : THandle;
rBytes : Cardinal;
PositionInt : Smallint;
lowByte : Byte;
xreg, xpos : Cardinal;
begin
xreg := offset_xreg;
xpos := offset_xpos;
Try
hProcess := OpenProcess(PROCESS_VM_READ,False,pid);
ReadProcessMemory(hProcess, Pointer(offset_base), @baseAddress, SizeOf(dword), rBytes);
ReadProcessMemory(hProcess, Pointer(baseAddress + xreg), @xOffsetInt, SizeOf(xOffsetInt), rBytes);
Move(xOffsetInt, xRegionFloatPtr, SizeOf(xOffsetInt));
xRegionFloat := Single(xRegionFloatPtr);
xRegionFloat := xRegionFloat / Divider;
ReadProcessMemory(hProcess, Pointer(baseAddress + xpos), @PositionInt, SizeOf(PositionInt), rBytes);
lowByte := LOBYTE(PositionInt);
xRegionBase := lowByte * 3 - $195;
xRegionBase := xRegionBase shl 6;
result := Round(xRegionBase+xRegionFloat);
except
result:= 0;
end;
end;
Packe ich diese in meine
DLL und rufe sie ab, springt dat ding als in die
Exception wegen Gleitkomma Überlauf (Except mal auskommentiert gehabt.)
Ich rufe die auch eig. ganz normal auf :/
Delphi-Quellcode:
const
pid = 6023;
[..]
Memo1.Lines.Add(IntToStr(get_x(pid, $CF2D94, $7C, $78, 10.0)));
Was mache ich falsch, bzw. was muss ich ändern um das es auch aus der
DLL heraus klappt. (Es sollte jedes mal der selbe wert rauskommen).
[edit=SirThornberry]zweite Frage entfernt - Mfg, SirThornberry[/edit]
David
[Fehler] Unit1.pas(1): Dein Kaffee ist kalt.
[Fehler] Unit1.pas(2): Dein linker großer Zeh ist eingeschlafen.
[Fataler Fehler] Projekt1.dpr(5): Verwendete
Unit "Unit1.pas" kann nicht comiliert werden.