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

使用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

检查固定权限

固定权限和

临时权限和

获取注册码

检测注册码

返回注册码

检查固定权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值