【问题标题】:Using coclass that implements multiple interfaces使用实现多个接口的 coclass
【发布时间】:2012-07-11 02:11:41
【问题描述】:

我正在编写一个 C++/CLI 应用程序,它使用提供许多类的 COM dll。它们中的大多数实现了许多接口。我想知道如何访问各个接口的方法。例如,当我查看类型库时,其中一个类被定义为:

coclass FWFile {
    [default] interface IFWFile;
    interface _IFWFileInternal;
    [default, source] interface _FWFileEvents;
    interface CStatistics;
    interface IFWFile2;
    interface IFWFile3;
    interface IFWFile4;
};

当我创建这种类型的对象时,它似乎实现了 IFWFile 接口。但是,我想利用 IFWFile2 中的方法。我可以简单地创建一个 IFWFile2 类型的对象并进行转换吗?

IFWFile2 file2 = (IFWFile2)file1;

【问题讨论】:

  • 长答案:是的。使用 C++/CLI 语法。

标签: c++ visual-c++ com c++-cli command-line-interface


【解决方案1】:

当使用CoCreateInstance() 时,您可以指定从新创建的对象中检索哪个接口。如果您需要多个接口 - 在调用 CoCreateInstance() 时检索一个并使用 QueryInterface() 检索其他接口。不要忘记为每次成功的接口检索调用Release()

只是不要 C 样式转换 COM 指针 - 不保证接口按照类型库中指定的顺序并且不保证实际类实际实现了接口。始终使用QueryInterface() 从 COM 对象中检索接口指针。

【讨论】:

  • C-casting 比你说的还要糟糕——每个接口都可以用一个完全不同的对象来实现。对于同一接口的多次QueryInterface 调用,您甚至可能得到不同的指针。唯一的要求是查询IUnknown 总是返回相同的指针。
猜你喜欢
  • 2013-02-26
  • 1970-01-01
  • 2017-07-09
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多