类工厂和许可
为了创建 OLE 控件的实例,容器应用程序调用了控件的类工厂的成员函数。 由于控件是实际 OLE 对象,类工厂将负责创建控件的实例。 每个 OLE 控件类必须有一个类工厂。
OLE 控件的另一个重要功能是强制使用许可证。 ControlWizard 可让您在控件项目的创建过程中包含授权。 有关控件许可的详细信息,请参阅 ActiveX 控件:为 ActiveX 控件授予许可。
下表列出了用于声明和实现控件的类工厂以及为控件授权的几个宏和函数。
类工厂和许可
宏或函数 | 说明 |
---|---|
DECLARE_OLECREATE_EX |
声明 OLE 控件或属性页的类工厂。 |
IMPLEMENT_OLECREATE_EX |
实现控件的 GetClassID 函数并声明类工厂的实例。 |
BEGIN_OLEFACTORY |
开始任何授权函数的声明。 |
END_OLEFACTORY |
结束任何授权函数的声明。 |
AfxVerifyLicFile |
确认控件是否已获得在特定计算机上使用的授权。 |
DECLARE_OLECREATE_EX
声明一个类工厂以及控件类的 GetClassID
成员函数。
DECLARE_OLECREATE_EX(class_name)
参数
class_name
控件类的名称。
备注
在控件类头文件中将此宏用于不支持许可的控件。
请注意,此宏的作用与以下代码示例相同:
BEGIN_OLEFACTORY(CMyAxCtrl)
END_OLEFACTORY(CMyAxCtrl)
要求
标头:afxctl.h
IMPLEMENT_OLECREATE_EX
实现控件的类工厂和控件类的 GetClassID
成员函数。
IMPLEMENT_OLECREATE_EX(
class_name,
external_name,
l,
w1,
w2,
b1,
b2,
b3,
b4,
b5,
b6,
b7,
b8)
参数
class_name
控件属性页类的名称。
external_name
向应用程序公开的对象名称。
类的 CLSID
的组件。 有关这些参数的详细信息,请查看关于 IMPLEMENT_OLECREATE
的注解。
注解
此宏必须出现在任何使用 DECLARE_OLECREATE_EX
宏或者 BEGIN_OLEFACTORY
和 END_OLEFACTORY
宏的控件类的实现文件中。 外部名称是向其他应用程序公开的 OLE 控件的标识符。 容器使用此名称请求此控件类的对象。
要求
标头:afxctl.h
BEGIN_OLEFACTORY
在控件类的头文件中开始类工厂的声明。
BEGIN_OLEFACTORY(class_name)
参数
class_name
指定类工厂所属的控件类的名称。
备注
类工厂许可函数的声明应在 BEGIN_OLEFACTORY
之后立即开始。
要求
标头:afxctl.h
END_OLEFACTORY
结束控件类工厂的声明。
END_OLEFACTORY(class_name)
参数
class_name
类工厂所属的控件类的名称。
要求
标头:afxctl.h
AfxVerifyLicFile
调用此函数,验证 pszLicFileName
命名的许可证文件是否对 OLE 控件有效。
BOOL AFXAPI AfxVerifyLicFile(
HINSTANCE hInstance,
LPCTSTR pszLicFileName,
LPOLESTR pszLicFileContents,
UINT cch = -1);
参数
hInstance
与许可控件关联的 DLL 的实例句柄。
pszLicFileName
指向包含许可证文件名的以 null 结尾的字符串。
pszLicFileContents
指向必须与在许可证文件开头找到的序列匹配的字节序列。
cch
pszLicFileContents 中的字符数。
返回值
如果许可证文件存在且以 pszLicFileContents 中的字符序列开头,则为非零值;否则为 0。
备注
如果 cch
为 -1,则此函数使用:
_tcslen(pszLicFileContents);
要求
标头:afxctl.h