Einzelnen Beitrag anzeigen

Benutzerbild von gizzy
gizzy

Registriert seit: 3. Jun 2007
59 Beiträge
 
Delphi 2007 Enterprise
 
#1

DLL Function fungiert anders als "direkte".

  Alt 1. Okt 2008, 20:58
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.
  Mit Zitat antworten Zitat