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

junglerover junglerover 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在一个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时,关于方法的返回值是非常没有任何限制的,你的任何类都可以成为返回值。
...全文
评论 7
收藏 已收藏
分享
返回顶部