最近我一直在研究
IDispatch
作品。下面是自动化客户端如何调用自动化服务器对象的方法的示例,该对象实现
分发接口
:
HRESULT hresult;
IDispatch * pdisp = (IDispatch *)NULL;
DISPID dispid;
OLECHAR * szMember = "color";
// Code that sets a pointer to the dispatch (pdisp) is omitted.
hresult = pdisp->GetIDsOfNames(
IID_NULL,
&szMember,
1, LOCALE_SYSTEM_DEFAULT,
&dispid);
pdisp->Invoke(
dispid,
...
)
在实现服务器时,这向我建议您可以实现
GetIDOfNames
作为:
HRESULT GetIDsOfNames(
REFIID riid,
LPOLESTR *rgszNames,
UINT cNames,
LCID lcid,
DISPID *rgDispId
){
rgDispId = 10;
return S_OK;
};
通过这种方式,我们告诉客户机,本质上,所有方法调用都是正常的,并且所有方法调用都将使用
DISPID==10
.
myObject->a();
myObject->ab();
myObject->abc();
myObject->abcd();
//^^ Are all valid and will all call DispID 10.
所以我的问题是,我们能不能以某种方式存储被调用的名称,这样我们的DispID 10方法就能知道调用的是哪个方法?
注意:这项工作的最终目标是构建一个COM服务器,该服务器能够成为其他COM客户机的COM服务器,而这些客户机本身可能缺乏成为COM服务器的能力/知识。