******************(100分问题)如何才能在一个AUTOMATION对象的方法中返回自定义的AUTOMATION对象?****************
在一个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时,关于方法的返回值是非常没有任何限制的,你的任何类都可以成为返回值。
在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时,关于方法的返回值是非常没有任何限制的,你的任何类都可以成为返回值。
...全文
相关推荐
home-automation-server:一个简单的节点家庭自动化服务器
标题中的“home-automation-server”是一个基于Node.js开发的家庭自动化服务器项目,它的主要目标是实现对家居设备的智能化管理和控制。
vRealize Automation75技术参考架构.pdf
对于大型部署,vRealize Automation可以扩展以满足更高的并发置备需求,例如更新了为100个并行置备推荐的硬件设置。
贝加莱 Automation PC产品目录.pdf
接口方面,APC620配备了SDL(SmartDisplayLink)、DVI接口,以及标准显示接口,支持2xETHERNET 10/100和2xUSB接口,还有2xRS232,CF卡插槽和PS/2键盘接口
Shell对象实现文件夹浏览对话框[归类].pdf
Shell对象中的`BrowseForFolder`方法是实现文件夹浏览对话框的关键。这个方法会弹出一个标准的Windows文件夹选择对话框,用户可以选择一个文件夹,方法的参数如下:1.
vRealize Automation75技术参考架构.docx
- 管理Manager Service的故障切换时,避免使用负载平衡算法,因为Manager Service通常仅允许一个活动实例。4.


网络通信/分布式开发
