解决报错:method “***” not supported by automation object

2016-09-19 10:23:27来源:oschina作者:shs0708人点击


我遇到这个问题是在delphi6当中,服务端使用了RemoteDataModule模块,客户端使用TSocketConnection和TWebConnection来连接服务端,并且使用服务端定义的method(即function)。
出现的问题是,每次运行客户端到调用自己在RemoteDataModule模块中添加的method时会报错:
method “***” not supported by automation object
我当时添加method是直接在mainformunit里面加入函数,并且手动在TLB.pas中加入两句声明。
出现错误的原因就是没有在RemoteDataModule模块的TypeLibrary中加入函数的声明,所以TLB中的声明是无效的,因为TLB.pas是系统自动生成的。。。
正确的添加method的方法是打开工程之后,在菜单中的View——Type Library中加入新的method,之后点击刷新的按钮,就会自动更新tlb文件,然后在RemoteDataModule中声明和定义该method。
以下是引用自:/2014th7cj/d/file/p/20160918/gzyxvpwy3bo.htmlbrDelphi三层结构对自定义远程接口的实现方法br 在三层中加入新的远程数据模块RemoteDataModule,会自动产生*.tlb的类型库,可自定义方法或函数
1、必须先在服务器程序的typr lib中加入该函数,并定义好输入、输出变量,相应的修改会自动反应在RemoteDataModule和lib文件中;否则,在调用的时候会出现“methon "函数名" not supported by automation object”。究其原因,远程数据模块其实相当于我们自定义的一个类,只不过由系统自动生成罢了,在调用的时候,如果将方法及其输入输出在类库中定义,则找不到该方法,就会出现无法调用的现象。
2、在RemoteDataModule找到要定义的函数,在那里实现自己的逻辑。
3、必须把datasetprovider的PoAllowCommandText:=true.否则,你在客户端无法使用lientdataset.commandtext属性了!这样你就可以在客户端调用socketconnection1.appserver..ExecSqls了,注意参数类型必须一致,字符串用widestring!!!!
4、不能运行三层客户端的自定义解决:regsvr32 midas.dll;install mdac

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台