Autor |
Beitrag |
sonny2007
Hält's aus hier
Beiträge: 14
|
Verfasst: Mi 07.05.14 20:50
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
Beiträge: 120
Erhaltene Danke: 18
D2005 Personal
|
Verfasst: 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
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 120
Erhaltene Danke: 18
D2005 Personal
|
Verfasst: 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
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Hält's aus hier
Beiträge: 14
|
Verfasst: 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
Hält's aus hier
Beiträge: 14
|
Verfasst: 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
|
|