如何使用 ATL (VS2008) 枚举给定 IDispatch 接口(interface) (IDispatch*
) 上可用的可用方法?我需要搜索具有特定名称的方法,一旦我有了 DISPID
,调用该方法(我知道该方法采用的参数。)理想情况下,我想使用智能 COM 指针(CComPtr<>
)来执行此操作。
这可能吗?
最佳答案
您可以枚举 IDispatch
通过类型信息公开的方法。有两种获取类型信息的方式:
- 通过调度接口(interface)的类型库(如果有的话)。
- 通过调用
IDispatch::GetTypeInfo
.
不幸的是,IDispatch
实现没有义务提供有关其实现的方法和属性的类型信息。
但是,如果是,则基本枚举涉及调用 ITypeInfo::GetTypeAttr
得到 TYPEATTR
对于接口(interface)并查看已实现方法 (cFuncs
) 和变量 (cVars
) 的数量,然后遍历这些并调用 ITypeInfo::GetFuncDesc()
或 ITypeInfo::GetVarDesc()
.当然,您还需要处理更多细节,我可以在此处列出,但这应该是您探索的良好起点。
这是一个不错的 article explaining the process in more details使用 VB.Net 中的代码。
关于c++ - 使用 ATL 枚举 COM 对象 (IDispatch) 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2112302/