다음을 통해 공유


CComClassFactory2 클래스

이 클래스는 IClassFactory2 인터페이스를 구현합니다.

구문

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

매개 변수

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 라이선스 키를 만들고 반환합니다.

설명

CComClassFactory2IClassFactory의 확장인 IClassFactory2 인터페이스를 구현합니다. IClassFactory2 는 라이선스를 통해 개체 만들기를 제어합니다. 라이선스가 부여된 컴퓨터에서 실행되는 클래스 팩터리는 런타임 라이선스 키를 제공할 수 있습니다. 이 라이선스 키를 사용하면 전체 컴퓨터 라이선스가 없는 경우 애플리케이션에서 개체를 인스턴스화할 수 있습니다.

ATL 개체는 일반적으로 CComCoClass에서 파생하여 클래스 팩터리를 획득합니다. 이 클래스에는 CComClassFactory기본 클래스 팩터리로 선언하는 매크로 DECLARE_CLASSFACTORY 포함됩니다. 사용 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정적 함수를 VerifyLicenseKeyGetLicenseKey구현해야 하며 IsLicenseValid. 다음은 간단한 라이선스 클래스의 예입니다.

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, 차례로 파생 및 IClassFactory2 CComObjectRootEx< 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로 설정됩니다.

Return Value

표준 HRESULT 값입니다.

설명

컴퓨터의 라이선스가 완전히 부여되어야 합니다. 전체 컴퓨터 라이선스가 없는 경우 CreateInstanceLic을 호출합니다.

CComClassFactory2::CreateInstanceLic

라이선스 키가 필요하다는 점을 CreateInstanceLic 제외하고 CreateInstance와 유사합니다.

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로 설정됩니다.

Return Value

표준 HRESULT 값입니다.

설명

RequestLicKey를 사용하여 라이선스 키를 가져올 수 있습니다. 허가되지 않은 컴퓨터에서 개체를 만들려면 호출 CreateInstanceLic해야 합니다.

CComClassFactory2::GetLicInfo

LICINFO 구조를 클래스 팩터리의 라이선스 기능을 설명하는 정보로 채웁니다.

STDMETHOD(GetLicInfo)(LICINFO* pLicInfo);

매개 변수

pLicInfo
[out] 구조체에 대한 포인터입니다 LICINFO .

Return Value

표준 HRESULT 값입니다.

설명

이 구조체의 멤버는 fRuntimeKeyAvail 라이선스 키가 지정된 경우 클래스 팩터리에서 허가되지 않은 컴퓨터에서 개체를 만들 수 있는지 여부를 나타냅니다. fLicVerified 멤버는 전체 컴퓨터 라이선스가 있는지 여부를 나타냅니다.

CComClassFactory2::LockServer

각각 호출 _Module::Lock 하여 모듈 잠금 수를 증가 및 _Module::Unlock감소합니다.

STDMETHOD(LockServer)(BOOL fLock);

매개 변수

fLock
[in] TRUE이면 잠금 수가 증가합니다. 그렇지 않으면 잠금 수가 감소합니다.

Return Value

표준 HRESULT 값입니다.

설명

_Module 는 CComModule의 전역 인스턴스 또는 CComModule 에서 파생된 클래스를 나타냅니다.

호출 LockServer 을 사용하면 여러 개체를 빠르게 만들 수 있도록 클라이언트가 클래스 팩터리를 유지할 수 있습니다.

CComClassFactory2::RequestLicKey

LICINFO 구조체의 멤버가 fRuntimeKeyAvail TRUE인 경우 라이선스 키를 만들고 반환합니다.

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

매개 변수

dwReserved
[in] 사용되지 않습니다. 0이어야 합니다.

pbstrKey
[out] 라이선스 키에 대한 포인터입니다.

Return Value

표준 HRESULT 값입니다.

설명

라이선스 키는 CreateInstanceLic을 호출하여 허가되지 않은 컴퓨터에서 개체를 만드는 데 필요합니다. FALSE이면 fRuntimeKeyAvail 완전히 라이선스가 부여된 컴퓨터에서만 개체를 만들 수 있습니다.

GetLicInfo를 호출하여 값을 검색합니다fRuntimeKeyAvail.

참고 항목

CComClassFactoryAutoThread 클래스
CComClassFactorySingleton 클래스
CComObjectRootEx 클래스
CComGlobalsThreadModel
클래스 개요