我正在使用boost :: interprocess :: message_queue进行进程间的通信。在其中一个我使用
::CoInitializeEx( 0, COINIT_MULTITHREADED );
设置COM调用。我无法访问在此调用之后从其他进程创建的任何队列,或者在CoInit调用之前访问相同的进程。
我对COM和他们的线程模型并不十分熟悉,CoInit调用是由同事添加的。我该怎么做才能解决这个问题?
这是一个简短的片段来说明:
boost::interprocess::message_queue m_queue1( boost::interprocess::open_or_create, "testqueue", 256, sizeof(int) );
::CoInitializeEx( 0, COINIT_MULTITHREADED );
boost::interprocess::message_queue m_queue2( boost::interprocess::open_only, "testqueue" );
在此示例中,第二个队列的构造函数将抛出异常,因为它认为队列不存在。如果我删除CoInit调用它可以正常工作。
编辑: Boost版本是1.46.1。上面代码段中对CoInit的调用返回S_OK。