COM逐步教程
2006-07-22 22:54:38 来源:WEB开发网本文示例源代码或素材下载
介绍
对于我来说,理解COM(Component Object Model,组件对象模型)绝不亚于一次长途旅行。我相信,每一个想要理解COM之后基本原理的程序员都必须使用普通的C++编写至少一个简单的COM对象,也就是说,不依靠MFC/ATL所提供的任何模板或宏的支持。在本文中,我将要逐步介绍如何从基本原理出发来创建简单的COM对象。这些组件可用于VC/VB的客户端程序。
作为练习,我们将要尝试设计一个COM组件,这一组件将要实现假想的快速相加算法。它必须传入两个长数据类型的参数,并返回另一个长参数给用户,也就是相加算法的结果。我们现在开始设计接口。
接口
COM对象的接口并不涉及到实际的实现,但是它的方法则标志着COM对象中用来和外界通信的部分。我们将我们的接口命名为IAdd,它的声明使用接口定义语言(Interface Definition Language,IDL)。IDL是用来定义函数标志的语言,它独立于各种程序语言之间,这就使得RPC底层能够在不同的计算机之间对参数进行打包、装载与解包。在我们的IAdd接口中,我们拥有SetFirstNumber和SetSecondNumber方法,它们用来传递加法的参数。还有一个方法,DoTheAddition,它用来完成加法并将结果回传给客户端。
第1步:
创建一个新的Win32 DLL工程(比如说AddObj),我们将会在这个文件夹中创建接下来的所有文件。创建一个空文件,然后键入以下内容。将它保存为IAdd.idl。接口的标识符可以使用工具uuidgen.exe来生成。
import "unknwn.idl";
[
object,
uuid(1221db62-f3d8-11d4-825d-00104b3646c0),
helpstring("interface IAdd is used for implementing a super-fast addition Algorithm")
]
interface IAdd : IUnknown
{
HRESULT SetFirstNumber(long nX1);
HRESULT SetSecondNumber(long nX2);
HRESULT DoTheAddition([out,retval] long *pBuffer);
};
[
uuid(3ff1aab8-f3d8-11d4-825d-00104b3646c0),
helpstring("Interfaces for Code Guru algorithm implementations .")
]
library CodeGuruMathLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
interface IAdd;
}
更多精彩
赞助商链接