赞
踩
一般而言,ATL实现了对COM组件最好的支持,所以不用MFC实现COM组件。但是MFC实际上也是可以实现COM组件的。
MFC com组件可以将MFC的类型作为参数进行传递,但ATL com只能用规定的COM数据类型。但实际上MFC 扩展dll也可以用MFC类型作为参数。
具体代码:https://github.com/moisiet/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查找某个接口的时候,返回的实际并不是接口的指针,返回的是实现接口的内置类实例对象的地址,通过这个地址指针我们实现对接口方法的访问。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。