2022年COM组件教程 .pdf
《2022年COM组件教程 .pdf》由会员分享,可在线阅读,更多相关《2022年COM组件教程 .pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、步骤 1:创建项目Visual Studio .NET 2003本教程将带领您逐步骤通过一个非属性化ATL 项目,该项目创建一个显示多边形的ActiveX 对象。此对象包括使用户得以更改组成多边形的边数的选项以及刷新显示的代码。注意 本教程创建与Polygon (多边形)示例相同的源代码。如果您希望避免手动输入源代码,则可以从多边形示例摘要 下载源代码。然后,您可以一边参考Polygon 源代码一边阅读教程,或者用它来检查自己的项目中是否有错误。使用“ATL 项目向导 ” 创建初始ATL 项目1.在 Visual Studio 开发环境中,在 “ 文件” 菜单上单击 “ 新建 ” ,然后单击
2、“ 项目” 。2.单击“ Visual C+ 项目” 文件夹并选择 “ ATL 项目 ” 。3.键入Polygon作为项目名称:源代码的位置通常默认为Visual Studio Projects ,并且将自动创建一个新文件夹。4.单击“ 确定 ” ,“ ATL 项目向导 ” 随即打开。5.单击“ 应用程序设置 ” 以查看可用选项:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 6.在创建控件时,如果控件必须是进程内服务器,则将
3、“ 服务器类型 ” 保留为DLL。7.本教程中将不使用属性,因此请确保没有选中“ 属性化 ” 复选框。8.将其他选项保留在它们的默认值,然后单击“ 完成” 。“ ATL 项目向导 ” 将通过生成若干个文件来创建项目。可以通过展开Polygon 对象在解决方案资源管理器中查看这些文件。下面列出了这些文件。文件说明Polygon.cpp 包含 DllMain 、DllCanUnloadNow、DllGetClassObject、DllRegisterServer和 DllUnregisterServer的实现。还包含对象映射,该映射是项目中ATL 对象的列表。它最初是空白的。Polygon.def
4、 此模块定义文件为链接器提供有关DLL 所需的导出的信息。Polygon.idl 接口定义语言文件,描述特定于对象的接口。Polygon.rgs 此注册表脚本包含用于注册程序的DLL 的信息。Polygon.rc 资源文件,最初包含版本信息和含有项目名称的字符串。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - Resource.h 资源文件的头文件。Polygonps.def 此模块定义文件为链接器提供有关代理所需的导出和支持
5、跨单元调用的存根(stub) 代码的信息。有关详细信息,请参见COM+ 单元模型。stdafx.cpp 将包括(#include ) ATL 实现文件的文件。stdafx.h 将包括(#include ) ATL 头文件的文件。在下一步骤中,您将向项目添加控件。步骤 2:添加控件Visual Studio .NET 2003在此步骤中,您将向项目添加控件,生成此控件,并在Web 页中对其进行测试。向 ATL 项目添加对象1.在“ 类视图 ” 中,右击 “ Polygon”项目。2.指向快捷菜单上的 “ 添加” ,然后单击 “ 添加类 ” 。即会出现 “ 添加类 ” 对话框。左侧的树结构中列出了
6、不同的对象类别:3.展开树结构并单击 “ ATL”文件夹。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - 4.从右侧的模板列表选择“ ATL 控件 ” 。 单击“ 打开 ” 。 “ ATL 控件向导 ” 将打开,从中可以配置控件:5.键入PolyCtl作为简称,并注意其他字段将自动完成。先不要单击“ 完成 ” ,因为需要做一些更改。“ ATL 控件向导 ” 的“ 名称 ” 页包含以下字段:字段内容简称为控件输入的名称。类为了实
7、现控件而创建的C+ 类名。.h 文件为了包含C+ 类的定义而创建的文件。.cpp 文件为了包含C+ 类的实现而创建的文件。CoClass此控件的组件类的名称。接口接口的名称,控件将在此接口上实现它的自定义方法和属性。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - 类型对控件的说明。ProgID可用于查找控件的CLSID 的可读名称。需要在 “ATL 控件向导 ” 中另外进行几个设置。启用对多格式错误信息和连接点的支持1.单击“
8、 选项 ” 打开 “ 选项 ” 页。2.选择“ 连接点 ” 复选框。这将创建对IDL 文件中输出接口的支持。还可以使控件成为可插入的, 这意味着它可以嵌入到支持嵌入对象的应用程序中,如 Excel 或 Word 。使控件成为可插入的1. 单击“ 外观 ” 打开 “ 外观 ” 页。2. 选择“ 可插入 ” 复选框,默认情况下该复选框会被清除。对象显示的多边形将具有纯填充颜色,因此需要添加“ 填充颜色 ” 常用属性。添加“ 填充颜色 ” 常用属性并创建控件1.单击“ 常用属性 ” 打开“ 常用属性 ” 页。2.在“ 不支持 ” 下,向下滚动可能常用属性的列表。双击“ Fill Color”以将其移
9、动到 “ 支持 ” 列表:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 3.这将完成控件的选项。单击“ 完成” 。在向导创建控件时,有若干代码改变了并添加了一些文件。创建了以下文件:文件说明PolyCtl.h 包含 C+ 类CPolyCtl的大部分实现。PolyCtl.cpp 包含CPolyCtl的其余部分。PolyCtl.rgs 一个文本文件,包含用于注册控件的注册表脚本。PolyCtl.htm 一个 Web 页,包含对新
10、创建的控件的引用。向导还执行了以下代码更改:向 stdafx.h 和 stdafx.cpp 文件添加了#include语句,以包含支持控件所必需的ATL 文件。更改了 Polygon.idl 以包含新控件的详细信息。将新控件添加到了Polygon.cpp 中的对象映射。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - - - - - - - - - 现在可以生成控件,查看它的运行情况。生成和测试控件生成和测试控件1.在“ 生成 ” 菜单上单击 “ 生成 Pol
11、ygon”。2.控件完成了生成后,在解决方案资源管理器中双击PolyCtl.htm 。将显示包含控件的HTML Web 页。您应看到一个矩形和文本ATL 7.0 : PolyCtl。这便是您的控件。注意 当完成本教程时,如果收到DLL 文件无法创建的错误信息, 请关闭 PolyCtl.htm 文件和 “ActiveX 控件测试 ” 容器并重新生成解决方案。如果仍无法创建DLL,请重新启动计算机或注销(如果您使用的是“ 终端服务 ” ) 。下一步,您将向控件添加自定义属性。步骤 3:向控件添加属性Visual Studio .NET 2003IPolyCtl是包含控件的自定义方法和属性的接口,您
12、将在其中添加属性。使用“ 添加属性向导 ” 添加属性1.在“ 类视图 ” 中右击IPolyCtl(展开 “ Polygon”分支找到它)。2.在快捷菜单上单击 “ 添加” ,然后单击 “ 添加属性 ” 。“ 添加属性向导 ” 随即出现。3.在属性类型的下拉列表中,选择“ short”。4.键入Sides作为属性名:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - 5.单击“ 完成 ” 完成属性的添加。将属性添加到接口时,MIDL
13、(编译 .idl 文件的程序)定义检索其值的Get方法和设置新值的Put方法。这些方法的命名方式是在属性名的前面加上put_和get_。“ 添加属性向导 ” 将必需的行添加到 .idl 文件。它还将Get和Put函数原型添加到PolyCtl.h 中的类定义,并将一个空实现添加到PolyCtl.cpp 。 您可以通过打开PolyCtl.cpp 并查找函数get_Sides和put_Sides来进行检查。虽然现在有了设置和检索属性的主干函数,但需要有地方存储属性。您将创建存储属性的变量,并相应地更新函数。创建存储属性的变量并更新put 和 get 方法1.从解决方案资源管理器中,打开PolyCtl
14、.h 并在类定义末尾的m_clrFillColor定义后添加下行:复制short m_nSides; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - 2.设置m_nSides的默认值。向 PolyCtl.h 中的构造函数添加一行, 使默认形状成为三角形:复制CPolyCtl() m_nSides = 3; 3.实现Get和Put方法。get_Sides和put_Sides函数声明已经添加到PolyCtl.h 。将以下代码添加到
15、PolyCtl.cpp 以完成这两个方法:复制STDMETHODIMP CPolyCtl:get_Sides(short *pVal) *pVal = m_nSides; return S_OK; STDMETHODIMP CPolyCtl:put_Sides(short newVal) if (newVal 2 & newVal 101) m_nSides = newVal; return S_OK; else return Error(_T(Shape must have between 3 and 100 sides); get_Sides方法通过pVal指针返回Sides属性的当前值。
16、在put_Sides方法中,代码确保用户将Sides属性设置为可接受的值。最小值必须是2,而且由于对每个边都要使用一系列点,100 是合理的最大值限制。您现在有了一个名为Sides的属性。下一步,您将更改绘图代码以便使用它。步骤 5:添加事件Visual Studio .NET 2003在此步骤中, 您将把ClickIn和ClickOut事件添加到ATL 控件。如果用户在多边形的内部单击,将激发ClickIn事件;如果用户在外部单击,将激发ClickOut。添加事件的任务如下:添加ClickIn和ClickOut方法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
17、- - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 21 页 - - - - - - - - - 生成类型库实现连接点接口添加 ClickIn 和 ClickOut 方法您在第 2 步中创建ATL 控件时,选择了 “ 连接点 ” 复选框。这在Polygon.idl 文件中创建了_IPolyCtlEvents接口。请注意,接口名称以下划线开头。 此约定指示该接口是内部接口。这样,允许浏览COM 对象的程序便可以选择不将此接口显示给用户。还请注意,选择“ 连接点 ” 时在Polygon.idl 文件中添加了下面的行,指示_IPolyCtlEvents 是默
18、认源接口:default, source dispinterface _IPolyCtlEvents;源属性指示控件为通知的源,因此它将对容器调用此接口。现在将ClickIn和ClickOut方法添加到_IPolyCtlEvents接口。添加 ClickIn 和 ClickOut 方法1.在“ 类视图 ” 中,展开Polygon 和 PolygonLib 以显示_IPolyCtlEvents。2.右击 _IPolyCtlEvents。在快捷菜单上单击“ 添加” ,然后单击 “ 添加方法 ” 。3.选择void作为 “ 返回类型 ” 。4.在“ 方法名称 ” 框中输入ClickIn。5.在“ 参
19、数属性 ” 下,选中 “ in ”框。6.选择“ LONG” 作为“ 参数类型 ” 。7.键入x作为参数名,然后单击“ 添加 ” 。8.重复第 5 步到第7 步,这次键入y作为参数名。9.单击“ 完成 ” 。10. 重复以上步骤,用相同的LONG参数x和y,相同的 “ 参数属性 ” 和相同的void返回类型定义ClickOut方法。检查 Polygon.idl 文件,查看代码是否添加到了_IPolyCtlEvents调度接口。Polygon.idl 文件中的_IPolyCtlEvents调度接口现在看起来应像这样:复制dispinterface _IPolyCtlEvents properti
20、es: methods: id(1), helpstring(method ClickIn) void ClickIn(inLONG x, in LONG y); id(2), helpstring(method ClickOut) void ClickOut(in LONG x, in LONG y); ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 21 页 - - - - - - - - - ClickIn和ClickOut方法接受单击点的x 和 y 坐标作为
21、参数。生成类型库现在请生成类型库,因为“ 连接点向导 ” 将用它来获取构造控件的连接点接口和连接点容器接口所需的信息。生成类型库重新生成项目。- 或 - 在“ 解决方案资源管理器 ” 中右击Polygon.idl 文件,并在快捷菜单上单击“ 编译 ” 。这将创建Polygon.tlb 文件, 它就是您的类型库。 从解决方案资源管理器中看不见Polygon.tlb 文件,因为它是二进制文件,无法直接查看和编辑。实现连接点接口为您的控件实现一个连接点接口和一个连接点容器接口。在 COM 中,事件通过连接点机制来实现。为了从 COM 对象接收事件,容器建立一个到COM 对象实现的连接点的报告连接。由
22、于COM 对象可以有多个连接点,COM 对象还实现连接点容器接口。通过该接口,容器可以确定哪些连接点受支持。实现连接点的接口称为IConnectionPoint,实现连接点容器的接口称为IConnectionPointContainer。为了帮助实现IConnectionPoint,您将使用 “ 实现连接点向导 ” 。该向导通过读取类型库并为每个可以激发的事件实现函数来生成IConnectionPoint接口。使用“ 实现连接点向导 ”1.在“ 类视图 ” 中,右击控件的实现类CPolyCtl。2.在快捷菜单上单击 “ 添加” ,然后单击 “ 添加连接点 ” 。3.从“ 源接口 ” 列表中选择
23、 “ _IPolyCtlEvents”并双击它,以将它添加到 “ 实现连接点 ” 列。单击“ 完成” 。将生成连接点的代理类,这里是指CProxy_IPolyCtlEvents。如果在解决方案资源管理器中查看生成的_IPolyCtlEvents_CP.h 文件,则将看到它包含一个名为CProxy_IPolyCtlEvents的类,该类是从IConnectionPointImpl派生的。_IPolyCtlEvents_CP.h 还定义了两个方法Fire_ClickIn和Fire_ClickOut,它们接受两个坐标参数。当您需要从控件中激发事件时,将调用这些方法。名师资料总结 - - -精品资料欢
24、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 21 页 - - - - - - - - - 向导还将CProxy_PolyEvents和IConnectionPointContainerImpl添加到了控件的多重继承列表。向导还通过将适当的项添加到COM 映射,为您公开了IConnectionPointContainer。您已完成了实现支持事件的代码。现在,添加一些代码以在适当的时候激发事件。记住,当用户在控件中单击左鼠标按钮时,您将激发ClickIn或ClickOut事件。若要了解用户何时单击按钮,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年COM组件教程 2022 COM 组件 教程
限制150内