IDispatch在DELPHI中与潘爱民老师所述的不一致地方。(50分)

  • 主题发起人 主题发起人 HORNEY
  • 开始时间 开始时间
H

HORNEY

Unregistered / Unconfirmed
GUEST, unregistred user!
1。IDispatch的INVOKE函数中参数潘老师说是倒序填充,但我发现真的倒序时反而会有
类型错误的显示。
2。如果说上面这个可能是因为DELPHI自己定义了INVOKE方法而使我们用起来方便的话,
那么DELPHI自定义的GetIDsOfNames函数就更奇怪了,据潘老师说rgszNames参数要方法名和
参数名,但是我发现好像只要填方法名就可以了,取到方法名的DISPID以后就可以工作,
参数名填不填,参数DISPID弄不弄得出好象不搭界。而且DELPHI本身提供的GetIDsOfNames
也只给我填方法名,我在想:DELPHI是怎么知道参数的DISPID的?
在下接触IDispatch时间不是很长,请问各位上述这些是不是真的这样,如果不是的话,敢
问名位正确使用方法。另外,请问INVOKE方法中pVResult能不能返回值,我听说好像不能。
 
1.使用INVOKE函数是用来,当只引出IDISPATCH接口而不引出其他接口时,通过传入DISPID
来调用其他接口的方法(通过PARAM结构传入参数)。
2.GetIDsOfNames是根据输入的方法名称来获得DISPID(integer类型)用来给INVOKE做
参数来调用。DELPHI可能包装了这个方法,使得返回值为DISPID
 
请问INVOKE方法中pVResult能不能返回值?
 
所有Idispatch的Invoke中的参数和返回值在内部都是作为VARIANT对象处理的
如:
Stub.createRequest('GetName',True,OutBuf);
Stub.Invoke(OutBuf,InBuf);
Result:=UnmarshalWideText(InBuf);
 
多人接受答案了。
 
后退
顶部