Ce que j'essaye de faire est d'avoir l'application A envoyer l'application B un pointeur vers un objet que A a alloué sur la mémoire partagée (en utilisant boost :: interprocess). Pour ce transfert de pointeur, j'ai l'intention d'utiliser boost::interprocess::message_queue
. Évidemment, un pointeur direct direct de A n'est pas valide dans B, donc j'essaie de transférer un offset_ptr
alloué sur la mémoire partagée. Cependant, cela ne semble pas fonctionner.Transférer un pointeur via boost :: interprocess :: message_queue
Processus A fait ceci:
typedef offset_ptr<MyVector> MyVectorPtr;
MyVectorPtr * myvector;
myvector = segment->construct<MyVectorPtr>(boost::interprocess::anonymous_instance)();
*myvector = segment->construct<MyVector>(boost::interprocess::anonymous_instance)
(*alloc_inst_vec); ;
// myvector gets filled with data here
//Send on the message queue
mq->send(myvector, sizeof(MyVectorPtr), 0);
processus B fait ceci:
// Create a "buffer" on this side of the queue
MyVectorPtr * myvector;
myvector = segment->construct<MyVectorPtr>(boost::interprocess::anonymous_instance)();
mq->receive(myvector, sizeof(MyVectorPtr), recvd_size, priority);
Comme je le vois, de cette façon un faire une copie binaire du pointeur de décalage qui l'invalident en cours B. Comment est-ce que je fais cela correctement?