有关接口(100分)

  • 主题发起人 Wangzhibing
  • 开始时间
W

Wangzhibing

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将IDISPATCH转化成某一特定接口,用QueryInterface好象不行
Thank You first
 
要想转换接口,最简单是用as,但前提是idispatch必须支持这一特定接口,
否则用什么都白搭
function getinterface(adispatch:IDispatch):Idemo;
begin
try
result:=adispatch as Idemo;
except
showmessage('不支持idemo接口');
end;
end;
 
QueryInterface不行的话 as 也没戏,因为as 就是用 QueryInterface
 
QueryInterface不行说明不支持该接口
 
这个接口在VB下用OBJECT可以实现,用DELPHI实现接口转换出现‘Acess Violation'的错误。
接口定义如下:
Strings = dispinterface
['{A151E110-EC83-11CF-98A2-00805F7CED21}']
property _NewEnum: IUnknown dispid -4;
property Count: Smallint dispid 1;
property Unique: WordBool dispid 2;
function Item(Item: OleVariant): WideString
dispid 3;
function Add(const string_: WideString): WordBool
dispid 4;
procedure Clear
dispid 5;
function Find(const itemName: WideString
startIndex: OleVariant): Integer
dispid 6;
function _Item(Item: OleVariant): WideString
dispid 0;
end;
引用的函数是:
procedure TForm1.WebLinkRequest(Sender: TObject
const arguments,
values: IDispatch);
各位大虾救救我,谢谢!
 
转换不了接口,就没有办法了?
 
你把vb写出来看看,是不是你的写法有问题?
 
没有啦,都是自动生成的,只不过有关文档是VB的,我就不知道如何通过DELPHI来实现:

VB 示例
Private Sub WebLink_Request(ByVal arguments As Object, ByVal values As Object)

实际上,这是ESRI MOIMS ,有谁用过吗?
 
附加功能 将问题提前
 
顶部