共用方式為


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
類別概觀