Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Rätselhafter Datentyp....

Empfohlene Antworten

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

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

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

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

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.

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

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.