中间层用Midas,我在接口自定义了一个方法:GetSrvName(BSTR*);
当我在客户端调用此方法时,显示错误:“p->QueryInterface(...)
没有注册界面”,而我在自己的本机上则无此错误,难道那个
DCOM控件也在客户机上注册一次吗?请问怎么解决,谢谢!

解决方案 »

  1.   

    有这么一段,可以借鉴一下:后联编和用 IDispatch 两种方法从本质上没太大区别,这两种方法和先联编的最大区别是: 先联编一定要注册,而这两种方法都不需要。后联编实际上是通过 IDispatch 的 GetIDsOfNames 和 Invoke 两个成员方法来实现的(具体请参见相关参考书) Automation 的方法,被称为后期联编或叫后联编(Late Binding)的用法:
        Variant v = CreateOleObject( "Project1.AutoTest" );
        v.Exec( PropertySet( "Hello" ) << "Hello world!" );
        Label1->Caption = v.Exec( PropertyGet( "Hello" ) );
    使用 Automation 的前期联编或叫先联编(Early Binding)的用法:
        try {
            if ( !MyTest )
            {
                MyTest = CoAutoTest::Create( );
                MyTest.Hello = WideString( "Hello world!" );
            }
            Label1->Caption = MyTest.Hello;
        }
        catch ( EOleSysError &e )
        {
            ShowMessage( e.Message );
        }这都是c++builder的调用方式,我想原理查不多。
      

  2.   

    To  jlover():
    谢谢!
    但是我还是闹不懂,刚学COM,太菜了,
    DCOM服务器已经注册了,没必要在客户端也要注册吧?
    因为我编客户端程序时已经引入了库文件(。TLB),
    难道先联编不能用于DCOM吗?
      

  3.   

    应该需要在客户端注册你那个DCOM控件吧,
    我也不会,
    猜的
    因为信息说没注册
      

  4.   

    客户端需要注册,并且把服务器地址改成DCOM所在的服务器的地址