Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben
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

Geschrieben

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??? :)

Geschrieben
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

Geschrieben
Originally posted by SgtBadAzz

Lustiger Funktionsname ... K9sadhfkjsah , :

Das ist Standardsiert nach ISO :D;)

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.

Geschrieben

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

Geschrieben
Originally posted by Net-srac

Das ist Standardsiert nach ISO :D;)

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

Geschrieben
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

Geschrieben
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.... :D

Das mit dem in/out hatte ich überlesen.

Thnx@all:)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...