服务器A 运行一个COM服务EXE程序(只运行一个进程)
 所有客户端都运行一个COM应用程序(只运行一个进程),保存着本地用户的一些信息。
 多个客户端的COM应用程序能否与COM服务EXE程序通信?
 怎样与它通信呢?(我需要的不是在客户端创建一个远程实例,而是要客户端与服务已经存在的实例通信)分不够可再加,只要能解决问题!顶者有分!  

解决方案 »

  1.   

    DCOM不需要客户端去考虑这个问题, 只需要你的这个服务器("服务器A 运行一个COM服务EXE程序(只运行一个进程) ")确保自己只运行一个实例,client连接自然就是连到那个服务器.MSDN中就有例子
    DCOM Sample: Calls COM Object in Windows Service from Multiple Clients
      

  2.   

    你的服务器端的COM exe进行单例运行,可以创建Mutex等来互斥.
      

  3.   

    客户端DCOM调用server端的method, 给method添加个参数,让client传它自己的信息进去, 如果不符合规则, method就直接return.
      

  4.   

    2003那个DCOM drawserv能不能添加一个属性啊,在连接点时候根据那个属性再
    分发消息啊,我使着这么做,但是失败了!DrawCtl编译不成功!说抽象类不能事例化
     HRESULT Draw(
            long x1, long y1,
            long x2, long y2,
            unsigned long col)
        {
            T* pT = (T*)this;
            pT->Lock();
            HRESULT hr = S_OK;
            IUnknown** pp = m_vec.begin();
            IUnknown** ppEnd = m_vec.end();
            while (pp < ppEnd && hr == S_OK)
            {
                if (*pp != NULL)
                {
                    IDrawServ* pIDrawServ = (IDrawServ*)*pp;
    //给IDrawServ添加一个属性,在这根据这个属性自动分发消息,可是失败了,能不能这么做啊?
                       long n;
    pIDrawServ->get_XXX(&n);
                     if (n==1)
                    hr = pIDrawServ->Draw(x1, y1, x2, y2, col);
                }
                pp++;
            }
            pT->Unlock();
            return hr;
        }
      

  5.   


    楼主说的“DrawCtl编译不成功!说抽象类不能事例化”,可能是因为你引用的是头文件。
    应该用类似的代码引用
    #import "DrawCtl.tlb" no_namespace
    这个问题我也遇到过。
    楼主可以试一下。