Thema: Delphi Inkompatible Typen

Einzelnen Beitrag anzeigen

Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Inkompatible Typen

  Alt 28. Mär 2008, 04:33
Zitat von Reditus:
Hey!
Ich schonwieder!
Ja, DU schon wieder!

Erklär mal bitte im Detail, was Du mit den folgenden drei Zeilen zu tun beabsichtigst. Momentan sieht das nämlich eher aus wie Hand in den Mixer stecken.

Delphi-Quellcode:
  GetMem(buf,1);
  buf^ := Chr(('Edit1Text decimal = ''$' +IntToHex(Edit1Text, 1)); //Hier ist die Stelle wo ich den Wert aus der Edit Box als Hex einfügen möchte
  WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write);
Momentan machst Du da nämlich folgendes:

"Hole ein Byte Speicherplatz und merke die Adresse in buf"
"Schreibe an diese Stelle das Zeichen, dessen ASCII-Wert dem String 'Edit1Text decimal = ''$' +IntToHex(Edit1Text, 1)); entspricht"
"Schreibe das ominöse Zeichen im Zielprozess an die angegebene Stelle"

Zu Zeile zwei ist zu sagen: Das ist ja wohl der denktechnische Obergau Erstmal erwartet Chr() eine Zahl als Argument, und nicht irgendwelchen Text. Zum zweiten konvertiert IntToHex wie der Name schon sagt eine ZAHL und keinen Text. Ich vermute mal stark dass Du folgendes wolltest:

buf^ := Chr(StrToInt(Edit1Text)); Dazu sei gleich noch gesagt:
- Es fehlt die Bereichsprüfung (wenn ich da 500 eingebe, macht es BUMM)
- Es empfiehlt sich, TryStrToInt() zu benutzen, damit erspart man sich den try..except Block und der Code sieht übersichtlicher aus.
- Es ist unnötig, sich dynamisch Speicher zu besorgen um den dann per WriteProcessMemory wegzuschreiben. Genauso gut kannst Du Dir statt eines Pointers und GetMem direkt einen Char deklarieren, und dann dessen Adresse an WriteProcessMemory übergeben:

Delphi-Quellcode:
var
  MeinZeichen: Char;
[...]
  WriteProcessMemory(HandleWindow, Pointer(Address), @MeinZeichen, NumberOfBytes, write);
[...]
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat