Я пытаюсь сделать так, чтобы приложение A отправляло приложению B указатель на объект, который A выделил в общей памяти (используя boost :: interprocess).Для передачи этого указателя я намерен использовать boost::interprocess::message_queue
.Очевидно, что прямой необработанный указатель из A недопустим в B, поэтому я пытаюсь передать offset_ptr
, выделенный в общей памяти.Однако это также не похоже на работу.
Процесс A делает это:
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);
Процесс B делает это:
// 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);
Как я вижу, в этомспособ сделать битовую копию указателя смещения, который делает его недействительным в процессе B. Как я могу сделать это правильно?