Autor Beitrag
sonny2007
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 07.05.14 20:50 
Hiho Zusammen,

nach längeren Probieren verzweifle ich bald.

Folgender Fehler gibt mir Delphi XE2 aus.

ausblenden 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...

ausblenden 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
  // WindowHandle ermitteln
  hWnd := FindWindow('ArenaNet_Dx_Window_Class''Guild Wars 2');
  if hWnd = 0 then
    showMessage ('Cannot find Window.')
  else begin
    //PID
    GetWindowThreadProcessId(hWnd,@pID);
    // Handle OpenProcess
    hProc := OpenProcess(Process_VM_Read,false, pID);
    if hProc = 0 then
      showMessage('Cannot open process.')
    else
      //label1.Caption := FloatToStr(ReadData(hProc,$4455E048));
      ReadProcessMemory(hProc, ptr($4455E048), @puffer, sizeof(puffer), Bytesread); //READ  <---- Fehlerzeile
      label1.Caption := FloatToStr(puffer);
      closehandle(hProc);//close
    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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 120
Erhaltene Danke: 18


D2005 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 08.05.14 00:24 
user profile iconSMO hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 120
Erhaltene Danke: 18


D2005 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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