::CoInitializeEx(
NULL,
COINIT_APARTMENTTHREADED
);
IaaPtr pPtr1(
_uuidof(aa)
    );

    pPtr1->add(cc);我用上面这几句调用本机的COM,成功了,
但是我现在想把这个COM组件放到另一台机子上,再调用。但是我发现CoInitializeEx函数中没
有可指定计算机名的参数呀?那怎么办?以前我是用如下格式调用另一台机子的DCOM组件的:
COSERVERINFO ServerInfo={0,L"hzh",NULL,0};  //hzh为远程计算机名
MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
hr=CoCreateInstanceEx(CLSID_pp2,NULL,CLSCTX_REMOTE_SERVER,&ServerInfo,1,&MultiQi);

解决方案 »

  1.   

    CoInitializeEx是初始化COM……不是创建COM对象……
      

  2.   

    我是想知道用智能指针哪里可以指定远程DCOM组件的计算机名???哪位大哥说说看,不胜感激!!!!!!!!!!!
    是不是DCOM中不能用智能指针?
      

  3.   

    智能的照样可以用CoCreateInstanceEx……
      

  4.   

    jiangsheng(蒋晟.MSMVP2004Jan)大哥,可否说详细点,
    在智能指针中,怎么远程调用另一台机子的远程DCOM组件?
    不胜感激
      

  5.   

    这个好像和智能指针没有关系吧智能指针只是为了方便你释放内存,并没有什么实际的功能,功能是由接口定义的所以如何取道远程DCOM组件就是如何取道相应COM的接口,所以CoCreateInstanceEx仍然适用阿
      

  6.   

    智能指针是靠这两句:
    IaaPtr pPtr1(
    _uuidof(aa)
        );

        pPtr1->add(cc);
    就可以直接调用的呀,
    但如果是远程的,哪里可写远程机子名呢?
    CoCreateInstanceEx用在没IaaPtr pPtr1这个的时候呀,
    楼上大哥可否给个例子,如何调用?
      

  7.   

    _com_ptr_t( ) throw( );_com_ptr_t( Interface* pInterface ) throw( );_com_ptr_t( Interface* pInterface, bool fAddRef ) throw( );_com_ptr_t( int NULL ) throw( _com_error );template< > _com_ptr_t( const _com_ptr_t& cp ) throw( );template<typename _InterfacePtr> _com_ptr_t( const _InterfacePtr& p ) throw( _com_error );template< > _com_ptr_t( const _variant_t& varSrc ) throw( _com_error );explicit _com_ptr_t( const CLSID& clsid, DWORD dwClsContext = CLSCTX_ALL) throw( _com_error );explicit _com_ptr_t( LPOLESTR lpOleStr, DWORD dwClsContext = CLSCTX_ALL) throw( _com_error );explicit _com_ptr_t( LPCSTR lpcStr, DWORD dwClsContext = CLSCTX_ALL ) throw( _com_error );
    这么多构造函数呢,不是只有一个构造函数的
      

  8.   

    谢谢大哥,我试一下,还用CoCreateInstanceEx指定计算机名?
    看能不能行,不过智能指针好像封装CLSID什么的,唉,~~~
      

  9.   

    看看《com技术内幕》,讲的比较浅显易懂,沉着气看
      

  10.   

    用一种方法:
    COSERVERINFO ServerInfo={0,L"hzh",NULL,0};  //hzh为远程计算机名
    MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
    hr=CoCreateInstanceEx(_uuidof(pp),NULL,CLSCTX_REMOTE_SERVER,&ServerInfo,1,&MultiQi);  //这边改成(_uuidof(pp)
    这步可以呀!hr = pUnknown->QueryInterface(IID_Ipp,(void**)&pp)
    这步又不行了,提示IID_Ipp没定义?
    把:IID_Ipp改成uuidof(pp)提示找不到接口指针,
    智能指针用在DCOM怎么这么难呀?
      

  11.   

    不可能没IID的,去翻IaaPtr的定义头文件
      

  12.   

    谢谢各位大哥的真诚回复,
    终于行了,是这样的,以前我是用import .h文件,所以CLSID_aa,IID_aa我必须从DCOM组件的
    dll文件拷到客户端程序的前面。
     
    现在用智能指针,import .tlb文件,不要拷CLSID_aa,IID_aa,
    只要用_uuidof(pp),_uuidof(Ipp),分别代替CLSID_aa,IID_aa即可,
    呵呵,
    再次感谢!!!!!!!!!