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) 以及数据对象和数据源:创建和销毁。 有关注册的详细信息,请参阅注册一文。

继承层次结构

CObject

CCmdTarget

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。

    可以将 afxRegApartmentThreadingafxRegFreeThreading 这两个标志合并起来,以设置 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。

另请参阅

CCmdTarget 类
层次结构图
COleTemplateServer 类