我的COM學習筆記

發表于:2007-07-01來源:作者:點擊數: 標簽:
下面這個東西是我在01年學習COM時的一個筆記,原來發表在騰訊社區里,并被收入C/C++板塊的精華區中。近日重拾COM,將它稍做修改,挪到這里,以便查找。 ===================================== 2001.5.30 1.何謂組件

下面這個東西是我在01年學習COM時的一個筆記,原來發表在騰訊社區里,并被收入C/C++板塊的精華區中。近日重拾COM,將它稍做修改,挪到這里,以便查找。

=====================================

2001.5.30
1.何謂組件?
組件(component)就是一個軟件模塊,專門用來完成特定的預定工作,實現二進制級的代碼復用。

 
2.何謂COM?
COM,即Component Object Model(組件對象模型)。它不是編程語言,而是一套構造二進制兼容軟件組件的規范。依照這個規范可以建立能夠相互通信的軟件組件,而不管這些組件使用什么語言或工具建立的。


3.COM術語
組件代碼(Component Code):就是實現組件功能的代碼。
接口(Interface):是一組公用功能定義,是組件向程序或其他組件提供的,用來說明本組件的功能,以及如何使用這些功能的方法集。
GUID(Globally Unique Identifier,全局唯一標識符):為一個128位整數,用來向操作系統和應用程序唯一標識這個組件。
二進制兼容性(Binary compatibility):無論組件用什么語言建立,它都與其它COM組件兼容和可供其他組件使用。


4.函數應返回HRESULT
COM接口的所有方法,除IUnKnown::AddRef和IUnKnown::Release外,返回類型都應為HRESULT,HRESULT是狀態碼??梢杂肎etScode()將此狀態碼轉換成更詳細的SCODE。

 
5.COM組件的實現規則
實現IUnKnown規則
內存管理規則:管理內存就是管理指針。
引用計數規則


2001-5-31
1.如何實現自定義接口?
利用MIDL(Microsoft Interface Definition Language),它是基于Open Software Foundation Distributed Computing Environment 的 Remote Procedure Call IDL。

 
2.IDL文件
import "oaidl.idl";//此文件包括IDispatch接口的定義,import相當于#include
import "ocidl.idl";

[
     object,//COM接口定義
     //ICTAddIn接口唯一標識符(GUID)
     uuid(9EDADF6F-C069-11D1-A446-0000E8D2CD0A),
     dual,//表示客戶機可用兩種方法訪問這個接口
     helpstring("ICTAddIn Interface"),//將提示字符串與此接口建立聯系
     pointer_default(unique)//指定除參數表中所列屬性之外所有指針的缺省特征,unique表示指針可以是NULL,但不支持別名
]
interface ICTAddIn : IDispatch
{
   [id(1), helpstring("Insert code template.")] HRESULT CTInsCodeTmpl();
};
[
    uuid(9EDADF62-C069-11D1-A446-0000E8D2CD0A),
    version(1.0),
    helpstring("CodeTmpl Add-in Type Library")
]
library CODETMPLLib //類型庫
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    importlib("devshl.dll");
    importlib("ide\devdbg.pkg");

[
    uuid(9EDADF70-C069-11D1-A446-0000E8D2CD0A),
    helpstring("CodeTmpl - Code Template Add-in")
]
coclass CTAddIn //組件類
{
   [default] interface ICTAddIn;
};
};


3.用ATL建立COM服務器
要用ATL建立COM組件,就要生成從至少另外兩個類派生的類:CComObjectRoot和
CComCoClass。此外,還要從你的類派生CComObject類。

最后整理:2003-6-26  


原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97