visual studio 2010 c++ 创建com组件
以下为创建ATL简单对象并创建 COM 组件事件的步骤:
1. 创建一个新的 ATL DLL 项目。
2. 构建项目。
3. 在 Class View 中,右键单击 ATLEventTest1,添加一个新的 ATL Simple Object 类。命名为 MyObject。
4. 创建定义 with a) Apartment Threading b) Dual Interface c) Connection points 和其他需要的内容。
5. 重新构建项目。
6. 在 Class View 中,定位 ATLEventTest1Lib 库,右键单击 _MyObjectEvents,并选择“添加方法”。
7. 方法返回类型为 void,名称为 someEvent,参数为 int testParam,参数属性为 [in]。
8. 在添加参数后,应看到 "[in] int testParam"。
9. 在 IDL Attributes 选项卡上更改 id(如果有必要)。单击“完成”按钮。
10. 在 Class View 中,右键单击 CMyObject,选择“添加”,然后选择“实现连接点”。
11. 选择 _IMyObjectEvents 并单击 ">" 将其移动到已实现的连接点列表中。单击“完成”按钮。
12. 重新构建项目。
13. 现在,在您的 CMyObject 类中,应该能够调用 Fire_someEvent()。在 ATLEventTest1.idl 文件中将会看到一个新的方法在 dispinterface _IMyObjectEvents 下,_IMyObjectEvents_CP.h 文件将被创建并将为 Fire_someEvent() 创建广播代码。
如果对于已经创建了的ATL对象,但创建时没有选择创建连接点,可以使用如下步骤添加连接点:
要实现连接点,您有两个选择:
•通过向控件或对象添加连接点来实现自己的出站事件源。
•重用在另一个类型库中定义的连接点接口。
无论哪种情况,Implement Connection Point 向导都使用类型库来完成其工作。
要将连接点添加到控件或对象中,请执行以下操作:
1. 在 .idl 文件的库块中定义一个 dispinterface。如果在使用 ATL 控件向导创建控件时启用了连接点支持,则已经创建了 dispinterface。如果未在创建控件时启用连接点支持,则必须手动向 .idl 文件中添加 dispinterface。下面是一个 dispinterface 示例。出站接口不需要是分派接口,但许多脚本语言(如 VBScript 和 JScript)都需要这样做,因此此示例使用了两个 dispinterfaces:
[
uuid(3233E37D-BCC0-4871-B277-48AE6B61224A),
helpstring("Buddy Events")
]
dispinterface DBuddyEvents
{
properties:
methods:
};
使用 uuidgen.exe 或 guidgen.exe 实用程序生成 GUID。
2. 将 dispinterface 添加为项目 .idl 文件中对象的 [default,source] 接口。同样,如果在创建控件时启用了连接点支持,则 ATL 控件向导将创建 [default,source] 条目。要手动添加此条目,请添加下面这行粗体的代码:
coclass Buddy
{
[default] interface IBuddy;
[default,source] dispinterface DBuddyEvents;
};
请参见 Circ ATL 示例中的 .idl 文件。
3. 使用 Class View 向事件接口添加方法和属性。右键单击 Class View 中的类,在快捷菜单上指向“添加”,然后单击“添加连接点”。
4. 在 Implement Connection Point 向导的 Source Interfaces 列表框中,选择“Project's interfaces”。
如果为控件选择一个接口并按 OK,则会:
•生成具有实现事件外向调用代码的事件代理类的头文件。
•在连接点映射中添加一项。
您还将看到计算机上所有类型库的列表。如果要使用其他类型库定义连接点,则只能使用这些其他类型库之一来定义连接点中找到的