如何沟通out-proc * .exe COM服务器的beetwen部分?

时间:2011-10-19 11:15:19

标签: boost com ipc boost-interprocess inproc

我们有* .exe应用程序,它也是进程外COM服务器。

主线程正在做一些网络例程:它接收数据包并将它们放入队列。

COM客户端,例如VBA,使用COM服务器并且也想使用队列。尽管它们位于相同的地址空间,但问题是:

我们如何为COM客户端提供与exe进程同时使用队列的机会。

有一个想法是使用共享内存,但没有成功

UPD:

我尝试使用boost :: interprocess。 由于地址空间相同,我只想共享对象指针。

std::vector<int> //just example of MyType

exe部分:

main()
...
using namespace boost::interprocess;
struct shm_remove 
{
    shm_remove() { shared_memory_object::remove("SharedMemory"); }
    ~shm_remove(){ shared_memory_object::remove("SharedMemory"); }
} remover;

managed_shared_memory segment(open_or_create, "SharedMemory", 65536);
std::vector<int>** instance = segment.construct<std::vector<int>* >
   ("my_instance")  //name of the object
   ();            //ctor first argument
*instance = new std::vector<int>();
(*instance)->push_back(1);

// initialize the COM library
::CoInitialize(NULL);`enter code here`

COM部分:

HRESULT __stdcall CoMyCOMServer::Add(int *value)
{
cout << "Add()\n";

// this line goes out of debug, then VBA get error
managed_shared_memory segment(open_only, "SharedMemory"); 
std::vector<int>* *res = segment.find<std::vector<int>* > ("my_instance").first;
(*res)->push_back(*value);

return S_OK;
}

COM客户端(VBA)告诉

  

对象“IMyCOMServer”的方法“ADD”失败

Dim obj As IMyCOMServer
Set obj = CreateObject("MyCOMServer.object")   
obj.Add (2)

UPD2:

我刚刚使用try {} catch {}包围了Com部分,并发现了“找不到文件”消息的异常

0 个答案:

没有答案