在一个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时,关于方法的返回值是非常没有任何限制的,你的任何类都可以成为返回值。