Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Wert aus WM_CHAR und WPARAM

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
19.06.2006, 09:33 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Du kannst das nicht mit einem cast lösen egal wie du es drehst. TextOut erwartet eine Zeichenkette und nicht ein einzelnes Zeichen. Wenn du die Adresse von wParam übergibst dann liest TextOut solange ab dieser Stelle im Speicher bis es eine binäre 0 findet und deshalb bekommst du die Access Violation.
Du musst es also erst in einen String kopieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
19.06.2006, 14:56 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Na ja, "wie ich es drehe" stimmt ja nicht ganz. Ich verstehe nur nicht, wie FloSoft das dann gemeint hat, ich hatte es so verstanden, wie ich es gepostet hab. Mein Beispiel zuvor geht ja - durch einen cast !
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
19.06.2006, 16:29 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hab mir das nochmal angeschaut was bei dir funktioniert, aber das ist so nicht korrekt und sehr sehr gefährlich.

Die Funktion erwartet einen Zeiger auf eine 0 terminierte Zeichenkette. D.h. sie fängt dann an dieser Adresse an solange 1 Byte (weil 1 Byte ja 1 Zeichen wenn nicht Unicode oder so) weiterzulesen bis sie auf eine Binäre 0 stößt.
Wenn du nun dein WPARAM so castest dann übergibst du die Startadresse deiner 4 Byte Variablen (WPARAM ist ein 32 Bit Wert). D.h du hast 4 Byte die den Inhalt deiner Variablen enthalten und nach diesen 4 Byte kommt irgendwas anderes. Die Funktion beginnt jetzt wieder bei der Adresse Byteweise zu lesen.
Das das bei dir so funktioniert liegt entweder daran das durch den Wert der Variablen an in einem der 4 Bytes eine 0 steht oder das diese zufällig nach den 4 Bytes im Speicher steht.

Wenn deine Variable aber dann einen anderen Wert enthält oder was anderes danch im SPeicher steht wirst du wieder eine Access Violation oder eine undefinierte Ausgabe bekommen.

Dieser Post wurde am 19.06.2006 um 16:30 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: