C
crazycock
Unregistered / Unconfirmed
GUEST, unregistred user!
IDispatch中的invoke方法,定义如下:
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
(1)为什么这个var Params没有类型定义呢?
(2)在MSDN中,const IID:TGUID是保留的变量,必须设为IID_NULL,在Delphi中,该怎么定义呢?
(3)var Params在MSDN中好像是TDISPPARAMS,delphi中,应该怎么写呢?有没有谁有类似的代码片断?
特别声明:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1479908
http://www.delphibbs.com/delphibbs/dispq.asp?lid=642446
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1682012
http://www.delphibbs.com/delphibbs/dispq.asp?lid=585738
这几个文章我都看了,离线数据包也查了。关于invoke调用,大部分都是关于这个函数实现的代码,现在我想找一个调用invoke的代码例子。
求:一个例子。在OLE中的一个方法,有3个参数,现在我需要通过DispID去invoke这个方法,当然传递我刚才提到的三个参数过去了。
我开始的时候把Param设置成一个Variant的数组,没有参数的时候调用该方法已经成功。但是那个做法应该是不对的(指设置Param成Variant数组)。
var
aaaGUID:TGUID;
aaa:IDispatch;
HR:HRESULT;
tc:Integer;
dps:array[0..255] of Variant;//这个写法不对,当初我以为这个Params是个数组,就用这个方法,IDispatch中无参数的方法可以调用成功
pTypeInfo:ITypeInfo;
vaResult:OLEVariant;
excepInfo:TexcepInfo;
ArgErr:Integer;
begin
aaaGUID:=StringToGUID('{49739C4B-B689-4575-BAB6-70A4C302FE06}');
OleContainer1.OleObjectInterface.QueryInterface(aaaGUID,aaa);//OLEContainer中加载有我自己的ActiveForm
HR:=aaa.Invoke(217,aaaGUID,LOCALE_USER_DEFAULT,DISPATCH_METHOD,dps,@vaResult,@excepInfo,@ArgErr);
// 这里的aaaGUID本来应该是 IID_NULL,但是Delphi没有它的声明
OleCheck(HR);
aaa:=nil;
end;
现在哪位朋友可以帮我修改一下,改成可以传递参数的形式。
function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
(1)为什么这个var Params没有类型定义呢?
(2)在MSDN中,const IID:TGUID是保留的变量,必须设为IID_NULL,在Delphi中,该怎么定义呢?
(3)var Params在MSDN中好像是TDISPPARAMS,delphi中,应该怎么写呢?有没有谁有类似的代码片断?
特别声明:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1479908
http://www.delphibbs.com/delphibbs/dispq.asp?lid=642446
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1682012
http://www.delphibbs.com/delphibbs/dispq.asp?lid=585738
这几个文章我都看了,离线数据包也查了。关于invoke调用,大部分都是关于这个函数实现的代码,现在我想找一个调用invoke的代码例子。
求:一个例子。在OLE中的一个方法,有3个参数,现在我需要通过DispID去invoke这个方法,当然传递我刚才提到的三个参数过去了。
我开始的时候把Param设置成一个Variant的数组,没有参数的时候调用该方法已经成功。但是那个做法应该是不对的(指设置Param成Variant数组)。
var
aaaGUID:TGUID;
aaa:IDispatch;
HR:HRESULT;
tc:Integer;
dps:array[0..255] of Variant;//这个写法不对,当初我以为这个Params是个数组,就用这个方法,IDispatch中无参数的方法可以调用成功
pTypeInfo:ITypeInfo;
vaResult:OLEVariant;
excepInfo:TexcepInfo;
ArgErr:Integer;
begin
aaaGUID:=StringToGUID('{49739C4B-B689-4575-BAB6-70A4C302FE06}');
OleContainer1.OleObjectInterface.QueryInterface(aaaGUID,aaa);//OLEContainer中加载有我自己的ActiveForm
HR:=aaa.Invoke(217,aaaGUID,LOCALE_USER_DEFAULT,DISPATCH_METHOD,dps,@vaResult,@excepInfo,@ArgErr);
// 这里的aaaGUID本来应该是 IID_NULL,但是Delphi没有它的声明
OleCheck(HR);
aaa:=nil;
end;
现在哪位朋友可以帮我修改一下,改成可以传递参数的形式。