中间层的DCOM控件如下:
TRenoteDataModlule上放一TQuery,一TDataProvideer,
自己定义一接口方法:QueryPersonInfo([in]BSTR sPersonName);
此方法根据sPersonName让TQuery控件查询相关信息。客户端:
一TDataMoule上放一TDComConnection,TClientDataSet;
没指定TDComConnection的ServerGUID和ServerName,
想动态指定。当客户端输入一参数“PersonName”时,则服务端返回
该Person的记录,但我调用QueryPersonInfo时,客户
端提示“没注册界面”等错误,而客户和中间层
在同一机子上则无此错误,请问我不想在客户端注册
DCOM控件,该怎么做?急!!!

解决方案 »

  1.   

    而客户和中间层
    在同一机子上则无此错误,//////////
    一般是不用注册dcom的 midas.dll注册了没有
      

  2.   

    To  duxin(小伍) :
    客户机安装了C++Builder,肯定注册了midas.dll
    我的意思是DCOM控件是否要注册?
      

  3.   

    To neo40(企鹅):
    一定要注册吗?
      

  4.   

    是的,一定要注册。
    你可以将Server导出的tlb文件,在客户端注册一下。
      

  5.   

    要注册DCOM吗?我的多个三层项目中好像从来就不用去注册dcom,但是必须注册midas.dll.
    你用中间层的机器中(开发DCOM的机器)的midas.dll去你客户端去注册一下看看
      

  6.   

    要注册!
     1。用TLB文件手工注册
     2。最好自动注册。直接将中间层的EXE拿到客户端执行一下再删掉就可以了。
    如果客户端没有安装过DELPHI,
       客户端还要注册MIDAS.DLL(考到系统目录手工注册一下)
      

  7.   

    我现在用的也是C++Builder 因为常用的是 SocketConnection   DComConnection无法在广域网中用  看到chechy的回复 我突然想起来 你是怎么用的 .TLB文件?有没有在客户端引入?如果没有的话 引入一下就好了
      

  8.   

    另外:
    1。还要配置中间层的DCOM
    2。如果有客户端有INTERFACE NOT SUPPORTED 等提示连接不上,
       则还要稍微配置一客户端
      

  9.   

    我也觉得不需要注册,
    因客户端程序已经引入tlb文件了
      

  10.   

    我现在也正在做三层项目,在客户端是不要注册的,凡正我昨天是这样实现的
    我用的是MIDAS+ADO来实现三层的.
      

  11.   

    而客户和中间层
    在同一机子上则无此错误,//////////
    一般是不用注册dcom的 midas.dll注册了没有(在98下放到system中,在2000下放到system32中)
    应该不用注册的
      

  12.   

    应该在客户端的机器上安装以下文件:midas.dll(在98下放到system中,在2000下放到system32中)
    在服务器上先使用regsvr32.exe对中间件进行注册,然后使用dcomcnfg.exe对中间件进行配置。如果服务器是2K的系统最好使用“组件服务“对你的中间件进行注册,否则可能出现98的客户端不能访问的情况。
      

  13.   

    你可以用SOCK呀,这个不用注册,运行scktsrvr就可以了
      

  14.   

    在程序中加入midiaslib单元好像不用再发布midias.dll了
      

  15.   

    是否需要注册,取决于你在程序中调用自定义接口的方式,客户端需要midas.dll的注册,但是,你自己tlb是不一定需要注册的。
        
        你在程序中如果使用默认的转换方式,就是,getServer返回的接口你把他存在OLEVariant类型的变量中,然后,用这个变量调用接口方法,那么这种程序方式是需要注册的。    如果,你把GetServer返回的接口存放在IDispatch类型的变量中,并且用强制转换接口的方式IdispXXXX()你自定义的接口通常有一个IdispXXX的封装,这种程序方式下不需要注册。    如果,你把GetServer返回的接口存放在IDispatch类型的变量中,并且使用Idiapatch接口的invoke方式调用自定义接口的函数,这种方式不需要注册。    如果,你在程序中如果使用默认的转换方式,就是,getServer返回的接口你把他存在OLEVariant类型的变量中,但是,你使用API函数LoadTypeLib或者LoadTypeLibEX导入过TLB那么,不需要注册的。以上,方式的简单原理说明,OleVariant类型的自动转换依赖于windows的辅助函数进行,它需要查找注册表找到对应的接口描述信息。但是,Delphi可以不需要这样,delphi的编译后程序在二进制上支持接口,那么,就可以使用IdispXXXX的方式,让Delphi自己封装成IDispatch的Invok调用。我这样的回答,可以给我6个星星了吧,呵呵,开玩笑的。
      

  16.   

    BlueTrees(蜗牛) 答得挺不错的,
    我印象中也是以为一定要在客户端注册应用服务器..
    昨天有人问起我这问题,我实际一试,却发现可以不用在客户端注册..