ATL COM 组件中的方法枚举





1.00/5 (1投票)
2001年5月8日
2分钟阅读

59016

554
解释了 ATL COM 中的方法枚举
引言
通常,当我们使用 Visual Basic 或 ASP 中的 COM 对象/控件时,我们会看到方法枚举,例如 ListView.ColumnHeaders.Add (一些参数)
。为了在 VC++ 中使用 ATL COM 向导开发此类 COM 组件,该向导允许用户枚举另一个 COM 对象的方法,本文档将帮助您在使用基于 ATL 的 COM 组件在 Visual Basic 和 ASP 环境中实现方法枚举。也可以在 VC++ 中访问它们。以下是在构建此类组件时需要遵循的步骤
开发组件的步骤
- 使用 ATL COM 向导创建一个名为 CoolCodeComponent 的 DLL 项目。
- 插入一个名为 "coolcode" 的“简单”对象,类名为
Ccoolcode
,接口名为Icoolcode
- 将一个名为
EnumMethod
的方法添加到Icoolcode
接口,如下所示HRESULT EnumMethod([out,retval] pEnumComponent *Res)
注意:这里的
pEnumComponent
是指向要枚举其方法的接口的指针。它将在本文第 8 步的 .IDL 文件中声明为typedef
。 - 将另一个名为 'EnumComponent' 的“简单”COM 对象插入到工作区,类名为
CEnumComponent
,接口名为IEnumComponent
。 - 向此接口添加两种方法
HRESULT Add(int x, int y,[out,retval] int *Sum)
注意:此方法用于将两个数字相加并返回它们的和
HRESULT Multiply(int x, int y, [out,retval] int *Mul)
注意:此方法用于将两个数字相乘并返回它们的积
- 在 EnumComponent.cpp 中为上述两种方法提供实现,如下所示
STDMETHODIMP CEnumComponent::Add(int x, int y, int *Sum) { *Sum = x + y; // Add this line return S_OK; }
STDMETHODIMP CEnumComponent::Multiply(int x, int y, int *Mul) { *Mul = x * y; // Add this line return S_OK; }
- 在 coolcode.h 文件中进行以下更改
- 添加 EnumComponent 的头文件
#include "EnumComponent.h"
- 声明一个成员变量到
CEnumComponent
,例如public : CComPtr<IEnumComponent> pEnumComp;
- 在 coolcode 的构造函数中创建 EnumComponent
Ccoolcode() { pEnumComp.CoCreateInstance(CLSID_EnumComponent); // Add this line }
- 在 coolcode 的析构函数中,释放对
IEnumComponent
的接口~Ccoolcode() { if(pEnumComp != NULL) pEnumComp.Release(); }
- 添加 EnumComponent 的头文件
- .IDL 文件的更改
- 在
import "oaidl.idl"
; 之前声明一个类型为IEnumComponent
的变量typedef IEnumComponent *pEnumComponent;
- 在
- 在 coolcode.cpp 中,将以下代码添加到
EnumMethod
STDMETHODIMP Ccoolcode::EnumMethod(pEnumComponent *Res) { *Res = pEnumComp; // Add this line return S_OK; }
现在以 Win32 Release MinDependency 模式构建组件
如何使用
在 Visual Basic 中检查组件
- 添加对
CoolCodeComponent 1.0 Type Library
- 将一个命令按钮添加到窗体,并在按钮单击事件中编写以下代码
Private Sub Command1_Click() Dim a As New COOLCODECOMPONENTLib.coolcode MsgBox a.EnumMethod.Add(10, 12) MsgBox a.EnumMethod.Multiply(10, 20) End Sub
- 当您运行应用程序时,它将在消息框中显示两个方法调用的结果。