MFC實現COM組件

一般而言,ATL實現了對COM組件最好的支持,所以不用MFC實現COM組件。但是MFC實際上也是可以實現COM組件的。

一、MFC DLL優點:

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查找某個接口的時候,返回的實際並不是接口的指針,返回的是實現接口的內置類實例對象的地址,通過這個地址指針我們實現對接口方法的訪問。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章