关于OCX的方法调用...(100分)

Z

ZZZ

Unregistered / Unconfirmed
GUEST, unregistred user!
新拾到一OCX,其一方法声明为:

severity = object1.Command (command, object2)

其中Object2的描述为

An object expression that evaluates to a Strings collection.

其VB实现代码为:

Dim result As New ESRIutil.Strings
Dim sev As Long
sev = Arcplot1.Command("mape <PATH>;arcs <PATH>", result)

在Delphi中调用时result为IDispatch,请问什么是IDispatch?
如何在Delphi中调用此方法?
 

王洁

Unregistered / Unconfirmed
GUEST, unregistred user!
IDispatch 是个COM接口,请参阅VC连机文档.IDispatch为OLE自动化的
基层接口,先声明一个IDispatch的指针,将返回值付给他,用完后记住
pDispatch.Release();
 
T

tqz

Unregistered / Unconfirmed
GUEST, unregistred user!
IDispatch,呵呵...
直接用OLE Auto不就完了。
定义sev为Variant
sev := Arcplot1.Command('mape arcs ', result);
然后就可以把sev当一个对象来用了。直接用sev.method这种格式调用sev的method
方法。
 
Z

ZZZ

Unregistered / Unconfirmed
GUEST, unregistred user!
关键是我不知道Result应该是什么类型,请赐教。
 
H

huizhang

Unregistered / Unconfirmed
GUEST, unregistred user!
两种方法可以得到OCX控件的pascal说明:

1. 在你倒入该控件时,Delphi 自动生成了一个与OCX相对应的xxxx_TLB.pas文件,
当你引用该控件时上述文件自动被加入到 Uses 说明中, 可以打开该文件, 察看一下
具体的Result类型. 该文件一般在 lib 目录下.
2. 可以用Delphi IDE文件菜单打开对应控件的Type Library, 里面有pascall说明
 
T

tqz

Unregistered / Unconfirmed
GUEST, unregistred user!
就定义Result为IDispatch,Delphi肯定没意见。
返回的Result可以直接作为对象引用。
 
W

wangts

Unregistered / Unconfirmed
GUEST, unregistred user!
定义result为variant或IDispatch,在delphi 3 中
引用时也许会出现问题,
最好应查看xxx_Lib.pas 文件,看其OCX是如何倒入的,可直接定义
result为其倒入类型,在delphi 2 和 delphi 3 使用ocx变量的定义
会稍有不同。
 
顶部