小弟做的COM服务器需要与两个客户端连接,一个是IE,一个是DLL库,现在需要实现的功能是IE发送消息到COM,COM再转发到DLL,通过IDispatch我只能实现IE发送消息到COM,COM怎么样发送到DLL呢?IE和DLL都连接到COM了,但连接表里只有一个连接,我的感觉是他们分别连接了这个COM的两个对象而已,所以连接表里只有一个连接。

解决方案 »

  1.   

    你的感觉是对的,有两个组件存在。你可以把你的组件设置成SINGLETON模式,组件只会创建一个,所有客户端共享同一个组件
      

  2.   

    恩,用jamesshooo兄的方法,单实例模式
      

  3.   

    我看了,我本来就是Single模式的
    class ATL_NO_VTABLE CCmdCtrl : 
    public CComObjectRootEx<CComSingleThreadModel>,
            ...
    还是不行呢,是不是有其他原因呢?我在事件接口中查看连接数,如下nConnections每次都为1
    int nConnections = m_vec.GetSize();
    for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
    {
        ...
    }
      

  4.   

    你这是单线程套间,不是单实例模式,在类里面添加下面的一句宏就是单实例
    public:
      DECLARE_CLASSFACTORY_SINGLETON(CCmdCtrl)
      

  5.   

    果然如此,搞定了,多谢jamesshooo了,一会儿就给分哈。
    还有个问题,我能不能从
    for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
    {
        pT->Lock();
        CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
        pT->Unlock();
        IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
        ...
    }
    中获取的pDispatch判断到底当前是要调用哪个客户端的函数呢?该怎么判读呢?
      

  6.   

    果然如此,搞定了,多谢jamesshooo了,一会儿就给分哈。
    还有个问题,我能不能从
    for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
    {
        pT->Lock();
        CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
        pT->Unlock();
        IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
        ...
    }
    中获取的pDispatch判断到底当前是要调用哪个客户端的函数呢?该怎么判读呢?
      

  7.   

    自己加了个链表,先将就用,把BOSS忽悠过了再说,没时间研究了。
      

  8.   

    网站名称: 搞笑图片|搞笑动漫|搞笑动画
    网站地址: http://www.iptry.cn
    网站简介: 专注于搞笑图片、搞笑动漫、搞笑动画的收集,力争做最好的搞笑类网站!