共用方式為


CComClassFactory2 類別

這個類別會實作 IClassFactory2 介面。

語法

template <class license>
class CComClassFactory2 : public IClassFactory2,
    public CComObjectRootEx<CComGlobalsThreadModel>,
    public license

參數

許可證
實作下列靜態函式的類別:

  • static BOOL VerifyLicenseKey( BSTR bstr );

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

  • static BOOL IsLicenseValid( );

成員

公用方法

名稱 描述
CComClassFactory2::CreateInstance 建立指定 CLSID 的物件。
CComClassFactory2::CreateInstanceLic 指定授權金鑰時,會建立指定 CLSID 的物件。
CComClassFactory2::GetLicInfo 擷取描述類別處理站授權功能的資訊。
CComClassFactory2::LockServer 鎖定記憶體中的類別處理站。
CComClassFactory2::RequestLicKey 建立並傳回授權金鑰。

備註

CComClassFactory2 實作 IClassFactory2 介面,這是 IClassFactory 延伸模組。 IClassFactory2 控制透過授權建立物件。 在授權電腦上執行的 Class Factory 可以提供執行時間授權金鑰。 此授權金鑰可讓應用程式在完整電腦授權不存在時具現化物件。

ATL 物件通常藉由衍生自 CComCoClass 來取得類別處理站。 這個類別包含宏 DECLARE_CLASSFACTORY ,會將 CComClassFactory 宣告 為預設類別處理站。 若要使用 CComClassFactory2 ,請在 物件的類別定義中指定DECLARE_CLASSFACTORY2 宏。 例如:

class ATL_NO_VTABLE CMyClass2 :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyClass2, &CLSID_MyClass>,
   public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
   DECLARE_CLASSFACTORY2(CMyLicense)

   // Remainder of class declaration omitted

CMyLicense,對 的樣板參數 CComClassFactory2 必須實作靜態函式 VerifyLicenseKeyGetLicenseKeyIsLicenseValid 。 以下是簡單授權類別的範例:

class CMyLicense
{
protected:
   static BOOL VerifyLicenseKey(BSTR bstr)
   {
      USES_CONVERSION;
      return !lstrcmp(OLE2T(bstr), _T("My run-time license key"));
   }

   static BOOL GetLicenseKey(DWORD /*dwReserved*/, BSTR* pBstr) 
   {
      USES_CONVERSION;
      *pBstr = SysAllocString( T2OLE(_T("My run-time license key"))); 
      return TRUE;
   }

   static BOOL IsLicenseValid() {  return TRUE; }
};

CComClassFactory2 衍生自 CComClassFactory2Base 授權 CComClassFactory2Base接著,衍生自 IClassFactory2CComObjectRootEx< CComGlobalsThreadModel >

繼承階層架構

CComObjectRootBase

license

CComObjectRootEx

IClassFactory2

CComClassFactory2

需求

標頭: atlcom.h

CComClassFactory2::CreateInstance

建立指定 CLSID 的物件,並擷取這個物件的介面指標。

STDMETHOD(CreateInstance)(LPUNKNOWN pUnkOuter, REFIID riid, void** ppvObj);

參數

pUnkOuter
[in]如果物件正在建立為匯總的一部分,則 pUnkOuter 必須是外部未知的。 否則, pUnkOuter 必須是 Null。

riid
[in]所要求介面的 IID。 如果 pUnkOuter 不是 Null,riid 必須是 IID_IUnknown

ppvObj
[out]riid 識別之介面指標的指標。 如果物件不支援這個介面, ppvObj 會設定為 Null。

傳回值

標準 HRESULT 值。

備註

要求電腦獲得完整授權。 如果完整電腦授權不存在,請呼叫 CreateInstanceLic

CComClassFactory2::CreateInstanceLic

類似于 CreateInstance ,不同之處在于 CreateInstanceLic 需要授權金鑰。

STDMETHOD(CreateInstanceLic)(
    IUnknown* pUnkOuter,
    IUnknown* /* pUnkReserved
*/,
    REFIID riid,
    BSTR bstrKey,
    void** ppvObject);

參數

pUnkOuter
[in]如果物件正在建立為匯總的一部分,則 pUnkOuter 必須是外部未知的。 否則, pUnkOuter 必須是 Null。

pUnkReserved
[in]未使用。 必須是 Null。

riid
[in]所要求介面的 IID。 如果 pUnkOuter 不是 Null,riid 必須是 IID_IUnknown

bstrKey
[in]先前從 呼叫 RequestLicKey 取得的執行時間授權金鑰。 需要此索引鍵才能建立 物件。

ppvObject
[out]riid 指定介面指標的指標。 如果物件不支援這個介面, ppvObject 會設定為 Null。

傳回值

標準 HRESULT 值。

備註

您可以使用 RequestLicKey 取得授權金鑰 。 若要在未授權的電腦上建立物件,您必須呼叫 CreateInstanceLic

CComClassFactory2::GetLicInfo

填入 LICINFO 結構,其中包含描述類別處理站授權功能的資訊。

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

參數

pLicInfo
[out]結構的 LICINFO 指標。

傳回值

標準 HRESULT 值。

備註

fRuntimeKeyAvail這個結構的成員指出,如果指定授權金鑰,類別處理站是否允許在未授權的電腦上建立物件。 fLicVerified 成員會指出是否有完整的電腦授權存在。

CComClassFactory2::LockServer

藉由分別呼叫 _Module::Lock_Module::Unlock 來遞增和遞減模組鎖定計數。

STDMETHOD(LockServer)(BOOL fLock);

參數

羊群
[in]如果為 TRUE,則會遞增鎖定計數;否則,鎖定計數會遞減。

傳回值

標準 HRESULT 值。

備註

_Module是指 CComModule 全域實例或衍生自它的類別。

呼叫 LockServer 可讓用戶端保留至類別處理站,以便快速建立多個物件。

CComClassFactory2::RequestLicKey

建立並傳回授權金鑰,前提是 fRuntimeKeyAvail LICINFO 結構的成員 為 TRUE。

STDMETHOD(RequestLicKey)(DWORD dwReserved, BSTR* pbstrKey);

參數

dwReserved
[in]未使用。 必須是零。

pbstrKey
[out]授權金鑰的指標。

傳回值

標準 HRESULT 值。

備註

呼叫 CreateInstanceLic 以在未授權的電腦上建立物件時,需要授權金鑰。 如果 fRuntimeKeyAvail 為 FALSE,則只能在完全授權的電腦上建立物件。

呼叫 GetLicInfo 以擷取 的值 fRuntimeKeyAvail

另請參閱

CComClassFactoryAutoThread 類別
CComClassFactorySingleton 類別
CComObjectRootEx 類別
CComGlobalsThreadModel
類別概觀