******************(100分问题)如何才能在一个AUTOMATION对象的方法中返回自定义的AUTOMATION对象?****************

junglerover 2005-07-01 11:32:39
在一个ACTIVEX Library工程MyDll中,添加了一个AUTOMATION对象MyClass,另一个AUTOMATION对象MyData。现需要在对象MyClass中,添加一个方法GetData,返回值为MyData对象。

在DELPHI的Type Library Editor中,右键点击IMyClass,选择新增Method为GetData,然后在Parameters页设置参数名为Result,数据类型为 MyData * ,选项为 [out, retval]。这时,总是会提示以下错误:

out parameter requires pointer type

我就奇怪了,这个MyData * 难道不是指针类型?它明明是在数据类型选项里,自动列出来的啊。如果把MyData * 改成 Long * , BSTR *, 甚至 Variant *,都不会出任何问题。难道DELPHI的AUTOMATION对象返回值,只支持这些标准类型?

以设置参数类型为Variant * 为例,DELPHI的TYPE LIBRARY EDITOR自动生成的函数原型如下:
function GetData(): OleVariant; safecall;

然后我强行更改也不行,在所有的接口定义部分和实现部分把OleVariant都改成MyData以后,一编译,TNND,居然自动都给我改回来了,变回OleVariant!真是神奇呀。

本人初学DELPHI,许多地方不甚明了,请大虾指教。如果这真是DELPHI的限制的话,那这个限制实在太没有道理了,因为在使用VB开发ACTVEX DLL时,关于方法的返回值是非常没有任何限制的,你的任何类都可以成为返回值。
...全文
285 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
junglerover 2005-07-04
  • 打赏
  • 举报
回复
果然还是有高手。解决了,多谢!放分。
kingwei1977 2005-07-04
  • 打赏
  • 举报
回复
MyData是个接口。在IDL中MyData *只表示定义接口变量,也就是说如果你定义的是输入参数,那么MyData *就对了。作为输出参数需要定义个指针变量,一般的参数加一个*就可以了。但是对于接口需要两个*表示接口的指针。
kingwei1977 2005-07-04
  • 打赏
  • 举报
回复
这样MyData **就对了。

coffee36 2005-07-04
  • 打赏
  • 举报
回复
好象DCOM的返回类型有限制。只能是HRESULT。但是COM好象没什么限制呀。奇怪了。
junglerover 2005-07-04
  • 打赏
  • 举报
回复
再顶一下。难道这个问题没人知道?
lovend 2005-07-01
  • 打赏
  • 举报
回复
帮你顶
junglerover 2005-07-01
  • 打赏
  • 举报
回复
自己也顶一下。这里用DELPHI做ACTIVEX的大虾多么?

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧