Net-srac Geschrieben 25. Februar 2003 Geschrieben 25. Februar 2003 Moin moin, ich habe hier Sourcecode und wollte ein paar Debugausgaben einbauen. Nun habe ich einen Parameter: const void** const p_pMessageIn, Hat irgendeiner ne Idee, was das darstellt und wie ich ihn mit cout ausgeben kann? Von der aufrufenden Methode wird er als ein Pointer übergeben. Thnx Zitieren
SgtBadAzz Geschrieben 25. Februar 2003 Geschrieben 25. Februar 2003 Originally posted by Net-srac Hat irgendeiner ne Idee, was das darstellt und wie ich ihn mit cout ausgeben kann? Hmm ist das ein konstanter Zeiger auf einen Zeiger (void Zeiger) und das auf was er zeigt ist auch konstant ... denke ich mal. Aber nur mit so einem Fragment ist es manchmal schwierig das zu erkennen , ohne Kontext. Frank Zitieren
Net-srac Geschrieben 25. Februar 2003 Autor Geschrieben 25. Februar 2003 thnx erstmal, dann mal mit schwierigem Kontext. Diese Methode ist ein Entry eines SPL Prozeduraufrufs. D.h. hier Ich rufe aus einem SPL-Programm C++ auf. in SPL sieht die deklaration so aus. /* DCL K9KMCMP ENTRY ( POINTER _IN, Msg_IN */ /* BIN FIXED(31) _IN, L_Msg_IN */ /* POINTER _INOUT, Msg_OUT */ /* BIN FIXED(31) _INOUT L_Msg_OUT */ /* ) STANDARD; */ [/PHP] Es ist als ein Pointer. In C++ schaut der dann so aus... [PHP] void K9KMCMP ( const void** const p_pMessageIn, const unsigned long* const p_ulOldSize, void** const p_pMessageOut, unsigned long* const p_ulNewSize ) Wenn ich ihn nur mit Cout ausgebe bekomme ich auch eine Adresse. Ich wollt aber mal den Inhalt davon anschauen.... jetzt besser??? Zitieren
SgtBadAzz Geschrieben 25. Februar 2003 Geschrieben 25. Februar 2003 Originally posted by Net-srac thnx erstmal, dann mal mit schwierigem Kontext. /* DCL K9KMCMP ENTRY ( POINTER _IN, Msg_IN */ /* BIN FIXED(31) _IN, L_Msg_IN */ /* POINTER _INOUT, Msg_OUT */ /* BIN FIXED(31) _INOUT L_Msg_OUT */ /* ) STANDARD; */ In C++ schaut der dann so aus... void K9KMCMP ( const void** const p_pMessageIn, const unsigned long* const p_ulOldSize, void** const p_pMessageOut, unsigned long* const p_ulNewSize ) [/PHP] Wenn ich ihn nur mit Cout ausgebe bekomme ich auch eine Adresse. Ich wollt aber mal den Inhalt davon anschauen.... jetzt besser??? [/b] Lustiger Funktionsname ... K9sadhfkjsah , aber back to business: Also ein const fehlt mal gegenueber deinem Originalposting, laut der Beschreibung der Parameter im Kommentar ist es ein In/Out Parameter, d.h. auf das was der Zeiger Zeiger zeigt ist NICHT konstant, der Zeiger Zeiger an sich aber ist es. Auch das Praefix im Namen (p_p...) legt nahe das es ein Zeiger auf einen Zeiger ist FYI. Wenn du da ran willst wuerde ich mal folgendes machen: char *p = *p_pMessageOut; long lLength = 0; dann denke ich mal, dass L_Msg_out wohl die Laenge der Message sein soll, also der letzte Parameter im Funktionskopf, obwohl das inkonsistent ist vom Namen her vom Typ aber zu stimmen scheint: while ( lLength != (*p_ulNewSize)) { cout << *p; lLength++; p++; } cout << endl; Ich hoffe das funktioniert einigermassen, ich habe es nicht probiert. Frank Zitieren
Net-srac Geschrieben 25. Februar 2003 Autor Geschrieben 25. Februar 2003 Originally posted by SgtBadAzz Lustiger Funktionsname ... K9sadhfkjsah , : Das ist Standardsiert nach ISO char *p = *p_pMessageOut; Ich kann doch einem char kein void * zuweisen. Da meckere ich und mein compiler. Fehler: Ein Wert vom Typ "void *" darf keinem Objekt vom Typ "char" zugewiesen werden. Zitieren
Guybrush Threepwood Geschrieben 25. Februar 2003 Geschrieben 25. Februar 2003 Hi, ich weiß nicht ob SgtBadAzz das genauso gemeint hat, oder ob ich überhaupt richtig liege. Aber ich würde sagen, dass const void** const p_pMessageIn ein konstanter Zeiger auf einen nicht konstanten Zeiger, der wiederum auf eine konstante Variable zeigt, ist. char *p = *p_pMessageOut; hast du`s mal so probiert? char *p = (char*)*p_pMessageOut; Gruß Guybrush Zitieren
SgtBadAzz Geschrieben 25. Februar 2003 Geschrieben 25. Februar 2003 Originally posted by Net-srac Das ist Standardsiert nach ISO Ich kann doch einem char kein void * zuweisen. Da meckere ich und mein compiler. Fehler: Ein Wert vom Typ "void *" darf keinem Objekt vom Typ "char" zugewiesen werden. Na ja den Cast wirste ja noch hinkriegen. Interessant ich habe das mal in IBM Sourcecode von einer TCP-IP Implementierung fuer AIX gesehen, der war aber von 1985 oder so... na ja vielleicht ist es jetzt ISO. Frank Zitieren
SgtBadAzz Geschrieben 25. Februar 2003 Geschrieben 25. Februar 2003 Originally posted by Guybrush Threepwood Hi, ich weiß nicht ob SgtBadAzz das genauso gemeint hat, oder ob ich überhaupt richtig liege. Aber ich würde sagen, dass const void** const p_pMessageIn ein konstanter Zeiger auf einen nicht konstanten Zeiger, der wiederum auf eine konstante Variable zeigt, ist. hast du`s mal so probiert? char *p = (char*)*p_pMessageOut; Gruß Guybrush Wir reden aber nicht ueber p_pMessageIn sonder ueber p_pMessageOut. Frank Zitieren
Net-srac Geschrieben 25. Februar 2003 Autor Geschrieben 25. Februar 2003 Originally posted by SgtBadAzz Na ja den Cast wirste ja noch hinkriegen. Interessant ich habe das mal in IBM Sourcecode von einer TCP-IP Implementierung fuer AIX gesehen, der war aber von 1985 oder so... na ja vielleicht ist es jetzt ISO. Frank Jep, nach dem Cast hat es geklappt. Hätt ich eigentlich auch drauf kommen können. Ich hab mal spasseshalber geschaut.. Die Source wurde 1994 initialisiert. An BS2000 und solchen Richtlinien wird man noch lange seinen Spass haben.... Das mit dem in/out hatte ich überlesen. Thnx@all:) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.