Autor Beitrag
theevilworm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: Mi 20.06.12 02:56 
Ich gebe auf, stundenlanges Googlen hat mir nicht zeigen können, wo der Fehler liegt. Ich habe den Code identisch zu einem funktionierenden Beispiel geschrieben, aber bei mir muckt der Parser bei der markierten Zeile rum:

ausblenden Quelltext
1:
[Fehler] Unit1.pas(35): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen					


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var
  Form1: TForm1;
  ProcessID, WindowName, processhandle: Integer;
  charhp: dword;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
WindowName := FindWindow(NIL,'SRO_Client');
GetWindowThreadProcessID(WindowName,@ProcessID);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessID);
ReadProcessMemory(ProcessHandle, ptr($1388CA58), @CharHP, SizeOf(CharHP), 0);
edit1.text:=IntToStr(CharHP);
end;


Welcher Typ stimmt denn nicht mit dem von ReadProcessMemory() erwarteten überein?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 20.06.12 07:02 
Syntaktisch korrigiert, inhaltlich habe ich meine Zweifel.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  processhandle,read: Cardinal;
  charhp: dword;
......
......
ReadProcessMemory(ProcessHandle, ptr($1388CA58), @CharHP, SizeOf(CharHP), read);

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
theevilworm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 61



BeitragVerfasst: Mi 20.06.12 10:00 
Vielen Dank, das funktioniert! Kannst du mir bitte kurz erklären, wo mein Fehler lag, also warum Cardinal statt Integer akzeptiert wird?
Inhaltlich macht das Programm nichts böses, ich lese nur Werte aus dem Speicher, aber schreibe keine. Das ist kein GameTrainer oder Bot, sondern soll mir diverse Werte außerhalb des Spiels anzeigen und eventuell später an Androidgeräte senden können.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 20.06.12 10:50 
user profile icontheevilworm hat folgendes geschrieben Zum zitierten Posting springen:
Vielen Dank, das funktioniert! Kannst du mir bitte kurz erklären, wo mein Fehler lag, also warum Cardinal statt Integer akzeptiert wird?

ReadProcessMemory schreibt in den letzten Parameter irgendwas rein. Das geht natürlich nur, wenn Du beim letzten Parameter eine Variable (bummi: "read") übergibst. Du hast aber eine Konstante (0) übergeben. Das war der "Hauptfehler".

Edit: gerade mal in der Doku nachgeschaut. Statt einer Variable hättest Du auch nil übergeben können.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)