将COM对象作为引用在模块内传递
Passing COM objects as references within module
是否有任何原因或约定不将COM对象作为内部函数的引用传递?
我知道COM API中不能使用引用,因为这会破坏二进制兼容性。但是在模块内呢?
通过引用非COM函数来传递COM对象是完全可以的。尽管引用只是对象的别名,但它们通常被实现为隐藏的指针。
问题很可疑,对象和接口之间的区别在COM中很重要。使用COM服务器的客户端代码只能使用接口指针。CoCreateInstance()在服务器上创建一个对象,并返回一个指向coclass实现的接口之一的接口指针。就像IUnknown*。你从来没有处理过一个物体。Boilerplate将接口指针保留为指针,通过引用传递它们并不是很有用。您可以将它们封装在一个智能指针类中,这样Release()调用是自动的。通过引用传递智能指针对象是可以的,它与COM.没有任何关系
在COM服务器中可能有所不同。您通常使用实现COM接口的C++类来实现那里的对象。如果该服务器中的代码需要对该对象的引用,那么只传递对C++对象的引用是有意义的。这只是C++中引用的标准用法,与COM无关。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 尝试导入pybind-opencv模块时出现libgtk错误
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- r-使用Rcpp模块公开带有引用参数的c++类方法时出错
- OpenCV无法引用扩展模块
- 将模块连接到 QML C++ - 引用错误: <blank> 未定义
- 如何存储对函数的引用,以便稍后可以在节点.js C++插件模块中回调它
- 在C++中,"static initialization fiasco"是否仅影响对另一个模块中定义的对象的数据成员的引用?
- 在编译 Android 版 OpenCV Core 模块时,包含 Eclipse 中未解析的指令引用
- 从不同模块调用函数 - 引用错误
- 将COM对象作为引用在模块内传递
- Lua:C++模块不能相互引用,未定义的符号