2013-06-21 61 views
-1

是否有任何理由或约定不通过COM对象作为内部函数的引用?在模块内传递COM对象作为引用

我知道COM API中不能使用引用,因为这会破坏二进制兼容性。但是在模块中呢?

回答

1

完全可以通过引用非COM函数来传递COM对象。尽管引用仅仅是对象的别名,但它们通常作为引擎下的指针来实现。

1

问题很腥,对象和接口的区别在COM中很重要。使用COM服务器的客户端代码只能用于接口指针。 CoCreateInstance()在服务器上创建一个对象,并返回指向由coclass实现的接口之一的接口指针。像IUnknown *一样。你从来没有处理过任何物体。 Boilerplate将接口指针作为指针并通过引用传递它们并不是非常有用。您可以将它们包装在智能指针类中,以便Release()调用是自动的。通过引用传递智能指针对象是好的,它与COM没有任何关系。

它可能在COM服务器中有所不同。您通常使用实现COM接口的C++类实现对象。如果该服务器中的代码需要对该对象的引用,那么传递一个对C++对象的引用是有意义的。这只是C++中引用的标准用法,与COM没有任何关系。