Entwickler-Ecke
Windows API - ReadProcessMemory - Float tatsächlichen Var Parameter
sonny2007 - Mi 07.05.14 20:50
Titel: ReadProcessMemory - Float tatsächlichen Var Parameter
Hiho Zusammen,
nach längeren Probieren verzweifle ich bald.
Folgender Fehler gibt mir Delphi XE2 aus.
Delphi-Quelltext
1:
| [DCC Fehler] DPS.pas(54): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen |
so hier dann noch der kleine Testschnipsel...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.Button1Click(Sender: TObject); var hWnd: THandle; hProc : THandle; pId : DWord; lBuf : integer; Bytesread: DWord; adresse : pointer; puffer : single;
begin hWnd := FindWindow('ArenaNet_Dx_Window_Class', 'Guild Wars 2'); if hWnd = 0 then showMessage ('Cannot find Window.') else begin GetWindowThreadProcessId(hWnd,@pID); hProc := OpenProcess(Process_VM_Read,false, pID); if hProc = 0 then showMessage('Cannot open process.') else ReadProcessMemory(hProc, ptr($4455E048), @puffer, sizeof(puffer), Bytesread); label1.Caption := FloatToStr(puffer); closehandle(hProc); end; end; |
Aktuell ist es für mich nicht nachvollziehbar woher dieser Fehler kommt. Bitte um kurze Hilfe.
Vielen Dank im Voraus.
Grüße
s0n
SMO - Mi 07.05.14 23:33
Wenn du dir mal die Deklaration von ReadProcessMemory anschaust, wirst du sehen, dass "Bytesread" kein DWORD sondern SIZE_T sein muss. Ein NativeUInt geht auch, denn das ist SIZE_T letztendlich.
Unter 32 Bit ist ein DWORD (=LongWord / Cardinal) zwar identisch zu SIZE_T, aber nicht unter 64 Bit. DWORD bleibt DWORD, aber SIZE_T richtet sich nach der "Bitness", daher die Inkompatibilität.
jaenicke - Do 08.05.14 00:24
SMO hat folgendes geschrieben : |
Unter 32 Bit ist ein DWORD (=LongWord / Cardinal) zwar identisch zu SIZE_T, aber nicht unter 64 Bit. DWORD bleibt DWORD, aber SIZE_T richtet sich nach der "Bitness", daher die Inkompatibilität. |
Bei einem var Parameter ist das aber auch völlig egal, ob ein Parameter kompatibel ist oder nicht. Es muss exakt der Typ sein, den der Parameter hat, egal ob ein anderer Typ auch kompatibel wäre.
SMO - Do 08.05.14 00:57
Nein, es muss nicht exakt derselbe Typ sein, den der Parameter bei der Deklaration hat.
Im Beispiel von sonny2007 ginge sonst nur SIZE_T, aber DWORD_PTR geht auch, weil sowohl SIZE_T als auch DWORD_PTR quasi nur Aliase für NativeUInt sind.
jaenicke - Do 08.05.14 09:30
Das hattest du im ersten Satz ja geschrieben. Ich wollte nur klarstellen, dass es nicht um die Größe des Typs oder so geht, sondern wirklich rein um die formalen Typen. Das las sich etwas missverständlich.
sonny2007 - Do 08.05.14 10:10
Erst einmal vielen Dank für eure Hilfe. Heute Abend werde ich es testen und gebe dann Rückmeldung.
Grüße
s0n
sonny2007 - Do 08.05.14 18:44
Hiho,
so eben getestet und es funktioniert. Wieso man auf sowas nicht selber kommt :) ....
Nochmals Danke an euch
Grüße
s0n
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!