c++ - 使用 ATL 枚举 COM 对象 (IDispatch) 方法?

标签 c++ com atl

如何使用 ATL (VS2008) 枚举给定 IDispatch 接口(interface) (IDispatch*) 上可用的可用方法?我需要搜索具有特定名称的方法,一旦我有了 DISPID ,调用该方法(我知道该方法采用的参数。)理想情况下,我想使用智能 COM 指针(CComPtr<>)来执行此操作。

这可能吗?

最佳答案

您可以枚举 IDispatch 通过类型信息公开的方法。有两种获取类型信息的方式:

不幸的是,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/

相关文章:

c# - 使用 c# 运行带有 activex 对象的 dll

c# - 将什么传递给 sqlite3_create_function 任意指针

c++ - Visual Studio 2012 C++ ATL/COM

c++ - CoCreateInstance 失败

c++ - 从另一个 HBITMAP 复制位图

visual-studio-2010 - 为什么 VS 2010 ATL 简单对象向导不会在项目名称包含连字符时生成 .cpp/.h 文件?

c++ - 使用字符串赋值和复合赋值安全吗?

c++ - 如何在没有得到 "lightweight-java-profiler"的情况下编译 "C++11 requires a space between literal and identifier"

c++ - 从 C++ 获取 shell 环境变量

c++ - 具有可变参数模板的类似 MPL 的 vector : Insertion