使用ATL建立支持IClassFactory2的COM组件

时间:2023-02-04 23:19:11

使用ATL建立支持IClassFactory2的COM组件

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 19次 | 进入软件测试论坛讨论

领测软件测试网

使用ATL建立支持IClassFactory2的COM组件

 

关键字:COM、IClassFactory2、对象创建权限、License、License Key

 

本文详细描述了如何使用ATL自身的功能创建具有创建权限功能的COM对象。最后还讲述了如何创建具有固定和临时权限的COM对象,以及如何获取注册码。

1      概述

IClassFactory2接口的作用是为给COM对象增加限制控制的功能。通过这个接口,只能在有合法使用权的电脑上才可以创建COM对象的实例。

COM对象的权限有两种,一种是固定权限,在创建COM对象之前就存在电脑中,创建COM对象时不需要提供附加的信息。另一种是临时的权限,在创建对象的时候必须提供表明具有权限的注册码,临时权限不能保留在电脑中,所以,每次创建实例的时候都需要提供注册码。每个COM对象可以选择使用固定权限方式、临时权限方式或两者都使用。

COM对象可以提供取得注册码的功能。通过这个功能,可以在具有固定权限的电脑上获取的注册码。

在COM对象被创建的时候,应该检查注册码或者固定权限的信息,如果COM对象判定用户没有使用权限,可以返回CLASS_E_NOTLICENSED。

2      ATL对IClassFactory2的支持

ATL完全支持IClassFactory2。通过宏DECLARE_CLASSFACTORY2声明COM对象支持IClassFactory2接口。DECLARE_CLASSFACTORY2宏需要一个License类实现具体的许可权限验证算法和注册码验证算法。License类可以使用任何名字,其中必须定义如下的几个成员函数。License类的形式如下:

 

class CLicenseCls

{

protected:

  static BOOL VerifyLicenseKey(BSTR bstr);

  static BOOL GetLicenseKey(DWORD dwReserved, BSTR* pBstr);

  static BOOL IsLicenseValid();

};

 

VerifyLicenseKey函数用于验证注册码的合法性。GetLicenseKey用于获取注册码。IsLicenseValid函数用于验证是否存在固定的使用权限。

用户可以根据需要,提供这三个函数的实现。如下表:

所需功能

VerifyLicenseKey

GetLicenseKey

IsLicenseValid

不检查权限

FALSE

FALSE

TRUE

固定权限

FALSE

FALSE

检查固定权限

临时权限

检测注册码

FALSE

FALSE

固定权限和

临时权限

检测注册码

FALSE

检查固定权限

固定权限和

临时权限和

获取注册码

检测注册码

返回注册码

检查固定权限