fork > Pointer einer Klasse an externes Programm zum casten übergeben

30/09/2013 - 18:32 von Heinz-Mario Frühbeis | Report spam
Hallo zusammen!

Folgendes ist ja quasi nur ein Ausschnitt, aber es geht um die Übergabe
des Pointers von "nIDAEx" per "pChar_Ex" und das ich diese Klasse
"nIDAEx" im externen Programm gebrauchen kann:

In einer fork-Anweisung:

std::string nPtr;
std::stringstream ss;
eb_ida::IDA::cIDAEx *nIDAEx = NULL;

nIDAEx = new eb_ida::IDA::cIDAEx(vProjekt->User);
nIDAEx->test = 10;
ss << nIDAEx;
nPtr = ss.str();
pChar_Ex = ChStringChar(nPtr);
execlp(pChar_Path, pChar_Path, pChar_SegmentName
, pChar_InstanceName, pChar_Ident, pChar_Sender
, pChar_Ex, NULL);

Im externen Programm:

eb_ida::IDA::cIDAEx *nTest = NULL;
void *nvoid = NULL;
std::string nstring;

std::stringstream ss;
ss << argv[5];
nstring = ss.str();
Std_Cout("IDABASE STRING", nstring); // Ist eine vordef.
Funktion mit std::cout
ss >> nvoid;
nTest = static_cast < eb_ida::IDA::cIDAEx* > (nvoid); // <-- [1]
Std_Cout("IDABASE TEST 1", ""); // <--[2] (wird noch ausgegeben)
Std_Cout("IDABASE TEST 2", nTest->test);


Bis [1] (wohl einschließlich) wird alles normal ausgeführt.

Ab [2] wird der restliche Programmablauf komplett übergangen, es wird
auch kein Fehler angezeigt, keine Warnung, nichts...
Es scheint also, anders kann ich es ja nicht benennen, daß "nTest"
gefüllt/gecastet wird, aber "irgendwie" kann man nicht darauf zugreifen.

Wo ist denn da der "Haken", oder der Fehler?

Vorab mit Dank
H-MF
 

Lesen sie die antworten

#1 Florian Weimer
30/09/2013 - 20:05 | Warnen spam
* Heinz-Mario Frühbeis:

Ab [2] wird der restliche Programmablauf komplett übergangen, es wird
auch kein Fehler angezeigt, keine Warnung, nichts...
Es scheint also, anders kann ich es ja nicht benennen, daß "nTest"
gefüllt/gecastet wird, aber "irgendwie" kann man nicht darauf
zugreifen.



Ja, weil nach dem execlp der Zeiger ungültig ist (der Elternprozeß
wurde komplett ersetzt). Du mußt das eigentliche Objekt transportieren,
siehe "Serialisierung".

Ähnliche fragen