中间层的DCOM控件如下:
TRenoteDataModlule上放一TQuery,一TDataProvideer,
自己定义一接口方法:QueryPersonInfo([in]BSTR sPersonName);
此方法根据sPersonName让TQuery控件查询相关信息。客户端:
一TDataMoule上放一TDComConnection,TClientDataSet;
没指定TDComConnection的ServerGUID和ServerName,
想动态指定。当客户端输入一参数“PersonName”时,则服务端返回
该Person的记录,但我调用QueryPersonInfo时,客户
端提示“没注册界面”等错误,而客户和中间层
在同一机子上则无此错误,请问我不想在客户端注册
DCOM控件,该怎么做?急!!!
TRenoteDataModlule上放一TQuery,一TDataProvideer,
自己定义一接口方法:QueryPersonInfo([in]BSTR sPersonName);
此方法根据sPersonName让TQuery控件查询相关信息。客户端:
一TDataMoule上放一TDComConnection,TClientDataSet;
没指定TDComConnection的ServerGUID和ServerName,
想动态指定。当客户端输入一参数“PersonName”时,则服务端返回
该Person的记录,但我调用QueryPersonInfo时,客户
端提示“没注册界面”等错误,而客户和中间层
在同一机子上则无此错误,请问我不想在客户端注册
DCOM控件,该怎么做?急!!!
在同一机子上则无此错误,//////////
一般是不用注册dcom的 midas.dll注册了没有
客户机安装了C++Builder,肯定注册了midas.dll
我的意思是DCOM控件是否要注册?
一定要注册吗?
你可以将Server导出的tlb文件,在客户端注册一下。
你用中间层的机器中(开发DCOM的机器)的midas.dll去你客户端去注册一下看看
1。用TLB文件手工注册
2。最好自动注册。直接将中间层的EXE拿到客户端执行一下再删掉就可以了。
如果客户端没有安装过DELPHI,
客户端还要注册MIDAS.DLL(考到系统目录手工注册一下)
1。还要配置中间层的DCOM
2。如果有客户端有INTERFACE NOT SUPPORTED 等提示连接不上,
则还要稍微配置一客户端
因客户端程序已经引入tlb文件了
我用的是MIDAS+ADO来实现三层的.
在同一机子上则无此错误,//////////
一般是不用注册dcom的 midas.dll注册了没有(在98下放到system中,在2000下放到system32中)
应该不用注册的
在服务器上先使用regsvr32.exe对中间件进行注册,然后使用dcomcnfg.exe对中间件进行配置。如果服务器是2K的系统最好使用“组件服务“对你的中间件进行注册,否则可能出现98的客户端不能访问的情况。
你在程序中如果使用默认的转换方式,就是,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个星星了吧,呵呵,开玩笑的。
我印象中也是以为一定要在客户端注册应用服务器..
昨天有人问起我这问题,我实际一试,却发现可以不用在客户端注册..