Entwickler-Ecke
Windows API - ReadProcessMemory(): Typen müssen übereinstimmen
theevilworm - Mi 20.06.12 01:56
Titel:  ReadProcessMemory(): Typen müssen übereinstimmen
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:
            
Quelltext    
                                        | 1:
 | [Fehler] Unit1.pas(35): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen                     | 
        
      
            
Delphi-Quelltext    
                                        | 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 | varForm1: 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 - Mi 20.06.12 06:02
Syntaktisch korrigiert, inhaltlich habe ich meine Zweifel.
            
Delphi-Quelltext    
                                        | 1:2:
 3:
 4:
 5:
 
 |   processhandle,read: Cardinal;charhp: dword;
 ......
 ......
 ReadProcessMemory(ProcessHandle, ptr($1388CA58), @CharHP, SizeOf(CharHP), read);
 | 
        
      
 
theevilworm - Mi 20.06.12 09: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 - Mi 20.06.12 09:50
	  |  theevilworm hat folgendes geschrieben  : | 
		  | 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.
 
Entwickler-Ecke.de  based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!