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 | 라이선스 키를 만들고 반환합니다. |
설명
CComClassFactory2
는 IClassFactory의 확장인 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
정적 함수를 VerifyLicenseKey
GetLicenseKey
구현해야 하며 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
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
클래스 개요