我的COM學習筆記 (轉)
下面這個東西是我在01年學習COM時的一個筆記,原來發表在社群裡,並被收入C/C++板塊的精華區中。近日重拾COM,將它稍做修改,挪到這裡,以便查詢。
=====================================
2001.5.30
1.何謂?
元件(component)就是一個模組,專門用來完成特定的預定工作,實現二進位制級的程式碼複用。
2.何謂COM?
COM,即Component Model(元件模型)。它不是語言,而是一套構造二進位制相容軟體元件的規範。依照這個規範可以建立能夠相互通訊的軟體元件,而不管這些元件使用什麼語言或工具建立的。
3.COM術語
元件程式碼(Component Code):就是實現元件功能的程式碼。
介面(Interface):是一組公用功能定義,是元件向或其他元件提供的,用來說明本元件的功能,以及如何使用這些功能的方法集。
GUID(Globally Unique ntifier,全域性唯一識別符號):為一個128位整數,用來向操作和應用程式唯一標識這個元件。
二進位制相容性(Binary compatibility):無論元件用什麼語言建立,它都與其它COM元件相容和可供其他元件使用。
4.應返回HRESULT
COM介面的所有方法,除IUnKnown::AddRef和IUnKnown::Release外,返回型別都應為HRESULT,HRESULT是狀態碼。可以用Getde()將此狀態碼轉換成更詳細的SCODE。
5.COM元件的實現規則
實現IUnKnown規則
管理規則:管理記憶體就是管理指標。
引用計數規則
2001-5-31
1.如何實現自定義介面?
利用MIDL( 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("idedevg.pkg");
[
uuid(9EDADF70-C069-11D1-A446-0000E8D2CD0A),
helpstring("CodeTmpl - Code Template Add-in")
]
coclass CTAddIn //元件類
{
[default] interface ICTAddIn;
};
};
3.用ATL建立COM
要用ATL建立COM元件,就要生成從至少另外兩個類派生的類:CComObject和
CComCoClass。此外,還要從你的類派生CComObject類。
最後整理:-6-26
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-997875/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 我的Hook學習筆記 (轉)Hook筆記
- Composer 學習筆記筆記
- ComfyUi學習筆記UI筆記
- Laravel 學習筆記:CommandLaravel筆記
- Docker Compose 學習筆記Docker筆記
- 我的Dll(動態連結庫)學習筆記 (轉)筆記
- 我的C#學習筆記14C#筆記
- 我的C#學習筆記1C#筆記
- sed學習筆記(轉)筆記
- gurb學習筆記(轉)筆記
- ANT學習筆記 (轉)筆記
- GRUB學習筆記(轉)筆記
- TreeView學習筆記 (轉)View筆記
- 我的Dll(動態連結庫)學習筆記 rivershan(原作) (轉)筆記
- numpy的學習筆記\pandas學習筆記筆記
- ctf學習筆記[轉載]筆記
- SAP BASIS學習筆記(轉)筆記
- PE學習筆記(一) (轉)筆記
- STL的學習筆記之一 (轉)筆記
- com.alibaba.fastjson學習筆記ASTJSON筆記
- SAP Commerce Cloud SmartEdit 學習筆記Cloud筆記
- JSP標記學習筆記 (轉)JS筆記
- Django學習筆記—Comments庫的使用方法小記Django筆記
- repuest轉發學習筆記一筆記
- C#學習筆記(一) (轉)C#筆記
- Microsoft Agent 學習筆記 (一) (轉)ROS筆記
- APT HOWTO 學習筆記(轉)APT筆記
- 學習筆記:debfoster & deborphan(轉)筆記
- linux安全學習筆記(轉)Linux筆記
- Python——格式轉換的學習筆記Python筆記
- oracle基本概念的學習筆記(轉)Oracle筆記
- Java學習筆記--我的第一個Java程式Java筆記
- 我的 golang 學習筆記系列四:反射初識Golang筆記反射
- 我的做題筆記 (轉)筆記
- this 關鍵字的理解--java學習筆記(轉)Java筆記
- 前端大神 Winter 直播筆記及我的學習方法論前端筆記
- 我的 golang 學習筆記系列一:什麼是切片Golang筆記
- 我的OpenCV學習筆記(六):使用支援向量機(SVM)OpenCV筆記