解决报错:method “***” not supported by automation object
博客专区 > shs0708 的博客 > 博客详情
解决报错:method “***” not supported by automation object
shs0708 发表于2年前
解决报错:method “***” not supported by automation object
  • 发表于 2年前
  • 阅读 468
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

我遇到这个问题是在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。

以下是引用自:http://blog.sina.com.cn/s/blog_4d0bbae30100bu2q.html

Delphi三层结构对自定义远程接口的实现方法 在三层中加入新的远程数据模块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

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 10
码字总数 6185
×
shs0708
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: