COleObjectFactory 类
实现 OLE 类工厂,此工厂创建服务器、自动化对象和文档等 OLE 对象。
语法
class COleObjectFactory : public CCmdTarget
成员
公共构造函数
名称 | 描述 |
---|---|
COleObjectFactory::COleObjectFactory | 构造 COleObjectFactory 对象。 |
公共方法
名称 | 描述 |
---|---|
COleObjectFactory::GetClassID | 返回此工厂创建的对象的 OLE 类 ID。 |
COleObjectFactory::IsLicenseValid | 确定控件的许可证是否有效。 |
COleObjectFactory::IsRegistered | 指示是否向 OLE 系统 DLL 注册对象工厂。 |
COleObjectFactory::Register | 将此对象工厂注册到 OLE 系统 DLL。 |
COleObjectFactory::RegisterAll | 将应用程序的所有对象工厂注册到 OLE 系统 DLL。 |
COleObjectFactory::Revoke | 撤销此对象工厂到 OLE 系统 DLL 的注册。 |
COleObjectFactory::RevokeAll | 撤销应用程序的对象工厂到 OLE 系统 DLL 的注册。 |
COleObjectFactory::UnregisterAll | 取消注册应用程序的所有对象工厂。 |
COleObjectFactory::UpdateRegistry | 将此对象工厂注册到 OLE 系统注册表。 |
COleObjectFactory::UpdateRegistryAll | 将应用程序的所有对象工厂注册到 OLE 系统注册表。 |
受保护方法
名称 | 描述 |
---|---|
COleObjectFactory::GetLicenseKey | 从控件 DLL 请求唯一键。 |
COleObjectFactory::OnCreateObject | 由框架调用以创建此工厂类型的新对象。 |
COleObjectFactory::VerifyLicenseKey | 验证控件中嵌入的键是否与容器中嵌入的键匹配。 |
COleObjectFactory::VerifyUserLicense | 验证控件是否获得设计时使用的许可。 |
备注
COleObjectFactory
类具有用于执行以下函数的成员函数:
管理对象注册。
更新 OLE 系统寄存器和运行时注册,该注册通知 OLE,使其知道对象正在运行且已准备好接收消息。
通过在设计时仅限获得许可的开发人员使用控件,在运行时仅限获得许可的应用程序使用控件,来强制实施许可。
将控制对象工厂注册到 OLE 系统注册表。
有关对象创建的详细信息,请参阅文章:数据对象和数据源 (OLE) 以及数据对象和数据源:创建和销毁。 有关注册的详细信息,请参阅注册一文。
继承层次结构
COleObjectFactory
要求
标头:afxdisp.h
COleObjectFactory::COleObjectFactory
构造一个 COleObjectFactory
对象,将其初始化为未注册的对象工厂,并将其添加到工厂列表中。
COleObjectFactory(
REFCLSID clsid,
CRuntimeClass* pRuntimeClass,
BOOL bMultiInstance,
LPCTSTR lpszProgID);
COleObjectFactory(
REFCLSID clsid,
CRuntimeClass* pRuntimeClass,
BOOL bMultiInstance,
int nFlags,
LPCTSTR lpszProgID);
参数
clsid
对此对象工厂表示的 OLE 类 ID 的引用。
pRuntimeClass
指向此工厂可创建的 C++ 对象的运行时类的指针。
bMultiInstance
指示应用程序的单个实例是否可支持多个实例化。 如果为 TRUE,则为每个请求启动应用程序的多个实例以创建对象。
nFlags
包含下列一个或多个标志:
afxRegDefault
:将线程模型设置为 ThreadingModel=Apartment。afxRegInsertable
:允许控件显示在 OLE 对象的“插入对象”对话框中。afxRegApartmentThreading
将注册表中的线程模型设置为 ThreadingModel=Apartment。afxRegFreeThreading
:将注册表中的线程模型设置为 ThreadingModel=Free。可以将
afxRegApartmentThreading
和afxRegFreeThreading
这两个标志合并起来,以设置 ThreadingModel=Both。 请参阅 Windows SDK 中的 InprocServer32,了解有关线程模型注册的详细信息。
lpszProgID
指向包含语言程序标识符的字符串(如“Microsoft Excel”)的指针。
注解
但是,若要使用该对象,必须对其进行注册。
有关详细信息,请参阅 Windows SDK 中的 CLSID 项。
COleObjectFactory::GetClassID
返回对此工厂表示的 OLE 类 ID 的引用。
REFCLSID GetClassID() const;
返回值
对此工厂表示的 OLE 类 ID 的引用。
备注
有关详细信息,请参阅 Windows SDK 中的 CLSID 项。
COleObjectFactory::GetLicenseKey
从控件的 DLL 请求唯一许可证键,并将其存储在 pbstrKey 指向的 BSTR 中。
virtual BOOL GetLicenseKey(
DWORD dwReserved,
BSTR* pbstrKey);
参数
dwReserved
保留供将来使用。
pbstrKey
指向将存储许可证键的 BSTR 的指针。
返回值
如果许可证键不为 NULL,则为非零值;否则为 0。
备注
此函数的默认实现返回 0,但不在 BSTR 中存储任何内容。 如果使用 MFC ActiveX ControlWizard 创建项目,ControlWizard 会提供用于检索控件许可证键的替代项。
COleObjectFactory::IsLicenseValid
确定控件的许可证是否有效。
BOOL IsLicenseValid();
返回值
若成功,则为 TRUE;否则为 false。
COleObjectFactory::IsRegistered
如果工厂注册到 OLE 系统 DLL,则返回非零值。
virtual BOOL IsRegistered() const;
返回值
如果工厂已注册,则为非零值;否则为 0。
COleObjectFactory::OnCreateObject
由框架调用来创建新对象。
virtual CCmdTarget* OnCreateObject();
返回值
指向所创建的对象的指针。 如果失败,可能会引发内存异常。
备注
替代此函数可根据传递给构造函数的 CRuntimeClass 以外的其他内容创建对象。
COleObjectFactory::Register
将此对象工厂注册到 OLE 系统 DLL。
virtual BOOL Register();
返回值
如果工厂已成功注册,则为非零值;否则为 0。
备注
启动应用程序时,通常由 CWinApp::InitInstance 调用此函数。
COleObjectFactory::RegisterAll
将应用程序的所有对象工厂注册到 OLE 系统 DLL。
static BOOL PASCAL RegisterAll();
返回值
如果成功注册工厂,则为非零值;否则为 0。
注解
启动应用程序时,通常由 CWinApp::InitInstance 调用此函数。
COleObjectFactory::Revoke
撤销此对象工厂到 OLE 系统 DLL 的注册。
void Revoke();
注解
框架会在应用程序终止之前自动调用此函数。 如有必要,请从 CWinApp::ExitInstance 的替代项中调用它。
COleObjectFactory::RevokeAll
撤销应用程序的所有对象工厂到 OLE 系统 DLL 的注册。
static void PASCAL RevokeAll();
注解
框架会在应用程序终止之前自动调用此函数。 如有必要,请从 CWinApp::ExitInstance 的替代项中调用它。
COleObjectFactory::UnregisterAll
取消注册应用程序的所有对象工厂。
static BOOL PASCAL UnregisterAll();
返回值
若成功,则为 TRUE;否则为 FALSE。
COleObjectFactory::UpdateRegistry
将应用程序的所有对象工厂注册到 OLE 系统注册表。
void UpdateRegistry(LPCTSTR lpszProgID = NULL);
virtual BOOL UpdateRegistry(BOOL bRegister);
参数
lpszProgID
指向包含人类可读程序标识符的字符串(如“Excel.Document.5”)的指针。
bRegister
确定是否要注册控件类的对象工厂。
备注
下面简要讨论了此函数的两种形式:
UpdateRegistry(
lpszProgID
) 向 OLE 系统注册表注册此对象工厂。 启动应用程序时,通常由 CWinApp::InitInstance 调用此函数。UpdateRegistry(
bRegister
) 此形式的函数是可重写的。 如果 bRegister 为 TRUE,此函数会将控件类注册到系统注册表。 否则,它会取消注册该类。如果使用 MFC ActiveX ControlWizard 创建项目,ControlWizard 会提供此纯虚拟函数的替代项。
COleObjectFactory::UpdateRegistryAll
将应用程序的所有对象工厂注册到 OLE 系统注册表。
static BOOL PASCAL UpdateRegistryAll(BOOL bRegister = TRUE);
参数
bRegister
确定是否要注册控件类的对象工厂。
返回值
如果成功更新工厂,则为非零值;否则为 0。
注解
启动应用程序时,通常由 CWinApp::InitInstance 调用此函数。
COleObjectFactory::VerifyLicenseKey
验证容器是否获得使用 OLE 控件的许可。
virtual BOOL VerifyLicenseKey(BSTR bstrKey);
参数
bstrKey
一个 BSTR,用于存储容器的许可证字符串版本。
返回值
如果运行时许可证有效,则为非零值;否则为 0。
备注
默认版本会调用 GetLicenseKey 来获取控件许可证字符串的副本,并将其与 bstrKey 中的字符串进行比较。 如果这两个字符串匹配,函数将返回非零值;否则返回 0。
可替代此函数以提供许可证的自定义验证。
VerifyUserLicense 函数会验证设计时许可证。
COleObjectFactory::VerifyUserLicense
验证 OLE 控件的设计时许可证。
virtual BOOL VerifyUserLicense();
返回值
如果设计时许可证有效,则为非零值;否则为 0。