delphi – CreateStdDispatch如何知道要调用的方法?
我面临着实施
IDispatch 界面的问题.有四种方法,幸运的是其中有三种方法很简单:
function TIEEventsSink.GetTypeInfoCount(...): HResult; { Result := E_NOTIMPL; } function TIEEventsSink.GetTypeInfo(...): HResult; { Result := E_NOTIMPL; } function TIEEventsSink.GetIDsOfNames(...): HResult; { Result := E_NOTIMPL; } 这是最后一种方法,Invoke很难.在这里,我面临着必须实际使用DispID,并调用我的适当方法;来自变量数组的unmarhsalling参数. function Invoke( dispIdMember: DISPID; riid: REFIID; lcid: LCID; wFlags: WORD; var pDispParams: DISPPARAMS; var pVarResult: VARIANT; var pExcepInfo: EXCEPINFO; var puArgErr: DWORD ): HRESULT; 不想编写所有繁琐的样板代码,我肯定会有错误,我去谷歌搜索 – 而不是做任何工作. 我在the MSDN Documentation of
优秀!我还是不想实现它!继续阅读:
Creating the IDispatch Interface链接说:
很好,CreateStdDispatch它是:
我打算称它为: CreateStdDispatch( myUnk,//Pointer to the object's IUnknown implementation. anotherObject,//Pointer to the object to expose. nil //Pointer to the type information that describes the exposed object (i has no type info) dispInterface //the IUnknown of the object that implements IDispatch for me ); 我无法弄清楚的是,CreateStdDispatch的Windows API实现如何知道在我的对象上调用哪些方法 – 特别是因为CreateStdDispatch不知道我正在使用什么面向对象的语言,或者它的调用约定. CreateStdDispatch如何知道 >为给定的dispid调用什么方法? 注意:我别无选择,只能实现调度接口;我没有定义the interface.我希望它是一个简单的早期绑定IUnknown,但它不是. 解决方法
传递给CreateStdDispatch的ITypeInfo参数是否公开了所有方法信息?
因此,您首先调用CreateDispTypeInfo创建类型信息并将其传递给CreateStdDispatch,然后CreateStdDispatch可以使用类型信息来确定要调用的方法,因为CreateDispTypeInfo需要包含所有这些信息的INTERFACEDATA 我可能会错,因为我没有时间研究它,但这对我来说是有道理的.我稍后会对此进行调查并更新答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |