首页 / 软件开发 / C++ / COM技术初探(2)
COM技术初探(2)2010-11-14venture三、纯手工创建一个COM组件1、从建工程到实现注册在这一过程中我们将完成三个步骤:创建dll的入口函数,定义接口文件,实现注册功能1.1创建一个类型为win32 dll工程创建一个名为MathCOM的win32 dll工程。在向导的第二步选择"A smiple dll project"选项。当然如果你选择一个空的工程,那你自己完成DllMain定义吧。1.2 定义接口文件生成一个名为MathCOM.idl的接口文件。并将此文件加入到刚才创建的那个工程里。//MathCOM.idl文件
// MathCOM.idl : IDL source for MathCOM.dll
//
// This file will be processed by the MIDL tool to
// produce the type library (MathCOM.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
uuid(FAEAE6B7-67BE-42a4-A318-3256781E945A),
helpstring("ISimpleMath Interface"),
object,
pointer_default(unique)
]
interface ISimpleMath : IUnknown
{
HRESULT Add([in]int nOp1,[in]int nOp2,[out,retval]int * pret);
HRESULT Subtract([in]int nOp1,[in]int nOp2,[out,retval]int * pret);
HRESULT Multiply([in]int nOp1,[in]int nOp2,[out,retval] int * pret);
HRESULT Divide([in]int nOp1,[in]int nOp2,[out,retval]int * pret);
};
[
uuid(01147C39-9DA0-4f7f-B525-D129745AAD1E),
helpstring("IAdvancedMath Interface"),
object,
pointer_default(unique)
]
interface IAdvancedMath : IUnknown
{
HRESULT Factorial([in]int nOp1,[out,retval]int * pret);
HRESULT Fabonacci([in]int nOp1,[out,retval]int * pret);
};
[
uuid(CA3B37EA-E44A-49b8-9729-6E9222CAE844),
version(1.0),
helpstring("MATHCOM 1.0 Type Library")
]
library MATHCOMLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(3BCFE27E-C88D-453C-8C94-F5F7B97E7841),
helpstring("MATHCOM Class")
]
coclass MATHCOM
{
[default] interface ISimpleMath;
interface IAdvancedMath;
};
};