MFC如何实现COM组件(选择mfc dll项目时选中Automation选项,就会提供实现COM组件的向导)

一般而言,ATL实现了对COM组件最好的支持,所以不用MFC实现COM组件。

但是MFC实际上也是可以实现COM组件的。

COM组件与普通的DLL区别在于:1.COM组件需要注册才能使用,而普通的DLL不需要注册,直接LoadLibrary使用;2.COM组件通过暴露接口指针被调用,而普通DLL是暴露函数地址被调用。

MFC实现COM组件必须要选择Automation这个选项。

选择了这个选项才会提供注册,反注册和类工厂函数。

MFC实现COM组件时,实现接口的类必须是继承自CCmdTarget(或者其子类)的类,且必须选择Automation或者Created by ID 这个选项,因为只有该类才提供对IUnknown的支持。

MFC是通过嵌入类真正实现接口的(嵌入类包含再定义的继承自CCmdTarget类中)。

因此MFC实现COM方式与ATL实现COM方式是不一样的,一定要搞清楚。

当给定IID使用QuryInterface查找某个接口的时候,返回的实际并不是接口的指针,返回的是实现接口的内置类实例对象的地址,通过这个地址指针我们实现对接口方法的访问。

详细介绍,MSDN中TN038: MFC/OLE IUnknown Implementation有介绍

猜你喜欢

转载自www.cnblogs.com/zhuluqing/p/8919199.html