译自:
http://www.codeproject.com/KB/COM/com_in_c1.aspx
- COM对象及其VTable
- GUID
- QueryInterface(), AddRef(), and Release()
- IClassFactor 工厂对象
- 打包到DLL
- 我们自己的C++/C头文件
- 定义文件(DEF文件)
- 安装DLL,注册对象
- C程序例子
- C++程序例子
- 修改代码
- 下一篇文章
简介
以前已经有很多介绍如何使用或者建立
COM/OLE/ActiveX
的例子了。这些例子通常使用微软基础类库
(MFC)
、
NET, C#, WTL
或者
ATL
。这些框架对底层进行包装,得到一些代码模板(用以生成
COM
)。它意图隐藏对程序员隐藏底层实现细节,所以我们通常不能能过其从中学到
COM
组件的知识。你所学到的只是如何使用
COM
之上的框架。
如果你只是使用
C
,而不使用
MFC, WTL, .NET, ATL, C#
,甚至也不使用
C++
来实现
COM
,这方面的例子很少。本系列文章将探讨如何在
C
语言中使用
COM
,而不使用任何框架。
对于
Win32
控件,如
Static, Edit, Listbox, Combobox
等等,你可以通过控件的句柄
(
例如
HWND)
,并且传递消息
(
通过
SendMessage)
给他,来操纵控件。同样,当控件想通知你或者传递数据的时候,它也会传递消息回来(如,把消息放进你的消息对列,你通过
GetMessage
函数取得)。
COM
控件的方式不像这样。它并不这样来回传递消息。
COM
对像传给你某种函数的指针,通过这些指针,你可以控制这些对像。例如,
IE
对像会传回一个函数指针,你可以使用这个指针来装载和显示
Web
页面;
Office
对像传递函数指针来加载文档。如果
COM
对象需要通知你某些事件,或者传递某些消息给你,那么你需要在你的程序中写一些函数,并且将这些指针提交给
COM
对象,以便
COM
对象在需要的时候进行调用。换句话说,你需要在你的程序里建立
COM
对象。为了做到这一点,你需要对
COM
对象有详细的了解。框架隐藏了实现细节,在本系列文章中我们将探讨这些细节。
总之,通过调用
COM
对象里的函数来操纵
COM
对象,并且
COM
对象调用你的程序中的函数来通知你,或者传递数据给你。这种方案就像调用动态库里的函数,并且动态库能调用你的
C
程序里的函数一样(
CALLBACK
回调),不过你不需要使用
LoadLibrary()
或者
GetProcAddres()
得到函数指针,而使用操作系统函数得到对象的指针,然后使用这个对像得到函数指针。