2011-01-05 3 views
3

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?

Répondre

0

Il semble que vous pouvez l'adresser comme décrit dans this post sur la liste de diffusion boost.

Questions connexes