• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 我的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.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>