다음을 통해 공유


MFC ActiveX 컨트롤: ActiveX 컨트롤 라이선스

ActiveX 컨트롤의 선택적 기능인 라이선스 지원을 사용하면 컨트롤을 사용하거나 배포할 수 있는 사용자를 제어할 수 있습니다. (라이선스 문제에 대한 추가 논의는 다음에서 라이선스 문제를 참조하세요. 기존 ActiveX 컨트롤을 업그레이드합니다.)

Important

ActiveX는 새로운 개발에 사용하지 않아야 하는 레거시 기술입니다. ActiveX를 대체하는 최신 기술에 관한 자세한 내용은 ActiveX 컨트롤을 참조하세요.

이 문서에서는 다음 토픽을 설명합니다.

라이선스를 구현하는 ActiveX 컨트롤을 사용하면 컨트롤 개발자로서 다른 사용자가 ActiveX 컨트롤을 사용하는 방법을 결정할 수 있습니다. 컨트롤 구매자에게 컨트롤과 . LIC 파일은 구매자가 컨트롤을 배포할 수 있지만 규약은 배포할 수 없습니다. 컨트롤을 사용하는 애플리케이션이 있는 LIC 파일입니다. 이렇게 하면 해당 애플리케이션의 사용자가 컨트롤의 라이선스를 먼저 부여하지 않고 컨트롤을 사용하는 새 애플리케이션을 작성할 수 없습니다.

ActiveX 컨트롤 라이선스 개요

ActiveX 컨트롤에 대한 라이선스 지원을 제공하기 위해 COleObjectFactory 클래스는 인터페이스IClassFactory2::RequestLicKey의 여러 함수 IClassFactory2 에 대한 구현을 IClassFactory2::GetLicInfoIClassFactory2::CreateInstanceLic제공합니다. 컨테이너 애플리케이션 개발자가 컨트롤의 인스턴스를 만들도록 요청하면 컨트롤을 확인하기 위해 GetLicInfo 호출됩니다. LIC 파일이 있습니다. 컨트롤의 사용이 허가된 경우 컨트롤의 인스턴스를 만들어 컨테이너에 배치할 수 있습니다. 개발자가 컨테이너 애플리케이션 생성을 완료하면 이번에는 RequestLicKey또 다른 함수 호출이 수행됩니다. 이 함수는 컨테이너 애플리케이션에 라이선스 키(단순 문자 문자열)를 반환합니다. 그런 다음 반환된 키가 애플리케이션에 포함됩니다.

아래 그림에서는 컨테이너 애플리케이션을 개발하는 동안 사용할 ActiveX 컨트롤의 라이선스 확인을 보여 줍니다. 이전에 멘션 컨테이너 애플리케이션 개발자는 적절한 이어야 합니다. 컨트롤의 인스턴스를 만들기 위해 개발 컴퓨터에 설치된 LIC 파일입니다.

Licensed ActiveX control verified at development.
개발 도중 사용이 허가된 ActiveX 컨트롤 확인

다음 그림에 표시된 다음 프로세스는 최종 사용자가 컨테이너 애플리케이션을 실행할 때 발생합니다.

애플리케이션이 시작되면 일반적으로 컨트롤 인스턴스를 만들어야 합니다. 컨테이너는 포함된 라이선스 키를 매개 변수로 전달하여 호출하여 CreateInstanceLic이를 수행합니다. 그런 다음 포함된 라이선스 키와 컨트롤의 라이선스 키 복사본 간에 문자열을 비교합니다. 일치가 성공하면 컨트롤의 인스턴스가 만들어지고 애플리케이션이 정상적으로 계속 실행됩니다. 은 .을(를) 확인합니다. LIC 파일은 컨트롤 사용자의 컴퓨터에 있을 필요가 없습니다.

Licensed ActiveX control verified at execution.
실행 도중 사용이 허가된 ActiveX 컨트롤 확인

컨트롤 라이선스는 컨트롤 구현 DLL의 특정 코드와 라이선스 파일의 두 가지 기본 구성 요소로 구성됩니다. 이 코드는 2개(또는 3개) 함수 호출과 문자 문자열로 구성되며, 이 문자열은 저작권 고지를 포함하는 "라이선스 문자열"이라고 합니다. 이러한 호출 및 라이선스 문자열은 컨트롤 구현()에서 찾을 수 있습니다. CPP) 파일입니다. ActiveX 컨트롤 마법사에서 생성된 라이선스 파일은 저작권 설명이 있는 텍스트 파일입니다. 프로젝트 이름을 사용하여 이름이 지정됩니다. LIC 확장(예: SAMPLE). Lic. 디자인 타임 사용이 필요한 경우 라이선스 컨트롤에 라이선스 파일이 함께 있어야 합니다.

라이선스가 있는 컨트롤 만들기

ActiveX 컨트롤 마법사를 사용하여 컨트롤 프레임워크를 만드는 경우 라이선싱 지원을 쉽게 포함할 수 있습니다. 컨트롤에 런타임 라이선스가 있어야 한다고 지정하면 ActiveX 컨트롤 마법사는 라이선스를 지원하기 위해 컨트롤 클래스에 코드를 추가합니다. 코드는 라이선스 확인을 위해 키 및 라이선스 파일을 사용하는 함수로 구성됩니다. 이러한 함수는 컨트롤 라이선스를 사용자 지정하도록 수정할 수도 있습니다. 라이선스 사용자 지정에 대한 자세한 내용은 이 문서의 뒷부분에 있는 ActiveX 컨트롤의 라이선스 사용자 지정을 참조하세요.

컨트롤 프로젝트를 만들 때 ActiveX 컨트롤 마법사를 사용하여 라이선스에 대한 지원을 추가하려면

  1. MFC ActiveX 컨트롤 만들기의 지침을 사용합니다. ActiveX 컨트롤 마법사의 애플리케이션 설정 페이지에는 런타임 라이선스를 사용하여 컨트롤을 만드는 옵션이 포함되어 있습니다.

이제 ActiveX 컨트롤 마법사는 기본 라이선싱 지원을 포함하는 ActiveX 컨트롤 프레임워크를 생성합니다. 라이선스 코드에 대한 자세한 설명은 다음 항목을 참조하세요.

라이선스 지원

ActiveX 컨트롤 마법사를 사용하여 ActiveX 컨트롤에 라이선스 지원을 추가하는 경우 ActiveX 컨트롤 마법사는 라이선스 기능을 선언하고 구현하는 코드를 컨트롤 헤더 및 구현 파일에 추가합니다. 이 코드는 COleObjectFactory에 있는 기본 구현을 재정의 VerifyUserLicense 하는 멤버 함수 및 GetLicenseKey 멤버 함수로 구성됩니다. 이러한 함수는 컨트롤 라이선스를 검색하고 확인합니다.

참고 항목

세 번째 멤버 함수 VerifyLicenseKey 는 ActiveX 컨트롤 마법사에서 생성되지 않지만 라이선스 키 확인 동작을 사용자 지정하도록 재정의할 수 있습니다.

이러한 멤버 함수는 다음과 같습니다.

  • VerifyUserLicense

    컨트롤 라이선스 파일의 존재에 대 한 시스템에 검사 하여 디자인 타임 사용을 허용 하는 컨트롤을 확인 합니다. 이 함수는 처리 IClassFactory2::GetLicInfo 의 일부로 프레임워크에서 호출되고 .IClassFactory::CreateInstanceLic

  • GetLicenseKey

    컨트롤 DLL에서 고유 키를 요청합니다. 이 키는 컨테이너 애플리케이션에 포함되며 나중에 컨트롤의 인스턴스를 만들기 위해 함께 VerifyLicenseKey사용됩니다. 이 함수는 처리 IClassFactory2::RequestLicKey의 일부로 프레임워크에서 호출됩니다.

  • VerifyLicenseKey

    포함된 키와 컨트롤의 고유 키가 동일한지 확인합니다. 이렇게 하면 컨테이너가 사용할 컨트롤의 인스턴스를 만들 수 있습니다. 이 함수는 처리 IClassFactory2::CreateInstanceLic 의 일부로 프레임워크에서 호출되며 라이선스 키에 대한 사용자 지정 확인을 제공하도록 재정의할 수 있습니다. 기본 구현은 문자열 비교를 수행합니다. 자세한 내용은 이 문서의 뒷부분에 있는 ActiveX 컨트롤의 라이선스 사용자 지정을 참조하세요.

헤더 파일 수정

ActiveX 컨트롤 마법사는 컨트롤 헤더 파일에 다음 코드를 배치합니다. 이 예제에서는 's 개체 factoryCSampleCtrl두 멤버 함수가 선언됩니다. 하나는 컨트롤의 존재를 확인하는 함수입니다. LIC 파일 및 컨트롤을 포함하는 애플리케이션에서 사용할 라이선스 키를 검색하는 다른 파일:

BEGIN_OLEFACTORY(CMyAxUICtrl)        // Class factory and guid
   virtual BOOL VerifyUserLicense();
virtual BOOL GetLicenseKey(DWORD, BSTR FAR*);
END_OLEFACTORY(CMyAxUICtrl)

구현 파일 수정

ActiveX 컨트롤 마법사는 다음 두 문을 컨트롤 구현 파일에 배치하여 라이선스 파일 이름과 라이선스 문자열을 선언합니다.

static const TCHAR BASED_CODE _szLicFileName[] = _T("NVC_MFC_AxUI.lic");

static const WCHAR BASED_CODE _szLicString[] = L"Copyright (c) 2006 ";

참고 항목

어떤 방식으로든 수정 szLicString 하는 경우 컨트롤의 첫 번째 줄도 수정해야 합니다. LIC 파일 또는 라이선스가 제대로 작동하지 않습니다.

ActiveX 컨트롤 마법사는 컨트롤 구현 파일에 다음 코드를 배치하여 컨트롤 클래스 VerifyUserLicenseGetLicenseKey 함수를 정의합니다.

// CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense -
// Checks for existence of a user license

BOOL CMyAxUICtrl::CMyAxUICtrlFactory::VerifyUserLicense()
{
   return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName, _szLicString);
}

// CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey -
// Returns a runtime licensing key

BOOL CMyAxUICtrl::CMyAxUICtrlFactory::GetLicenseKey(DWORD /*dwReserved*/,
   BSTR FAR* pbstrKey)
{
   if (pbstrKey == NULL)
      return FALSE;

   *pbstrKey = SysAllocString(_szLicString);
   return (*pbstrKey != NULL);
}

마지막으로 ActiveX 컨트롤 마법사컨트롤 프로젝트를 수정합니다. IDL 파일입니다. 라이선스가 부여된 키워드(keyword) 다음 예제와 같이 컨트롤의 coclass 선언에 추가됩니다.

[uuid(913E450B-E720-4C71-BCDF-71C96EE98FEB), licensed,
helpstring("MyAxUI Control"), control]
coclass NVC_MFC_AxUI

ActiveX 컨트롤의 라이선스 사용자 지정

VerifyUserLicense컨트롤 팩터GetLicenseKeyVerifyLicenseKey 클래스의 가상 멤버 함수로 선언되므로 컨트롤의 라이선스 동작을 사용자 지정할 수 있습니다.

예를 들어 또는 VerifyLicenseKey 멤버 함수를 재정의하여 컨트롤에 대한 여러 수준의 라이선스를 VerifyUserLicense 제공할 수 있습니다. 이 함수 내에서 감지한 라이선스 수준에 따라 사용자에게 노출되는 속성 또는 메서드를 조정할 수 있습니다.

컨트롤 만들기가 실패했음을 VerifyLicenseKey 사용자에게 알리기 위한 사용자 지정 메서드를 제공하는 코드를 함수에 추가할 수도 있습니다. 예를 들어 멤버 함수에서 VerifyLicenseKey 컨트롤을 초기화하지 못했음과 그 이유를 나타내는 메시지 상자를 표시할 수 있습니다.

참고 항목

ActiveX 제어 라이선스 확인을 사용자 지정하는 또 다른 방법은 호출AfxVerifyLicFile하는 대신 특정 레지스트리 키에 대한 등록 데이터베이스를 검사 것입니다. 기본 구현의 예제는 이 문서의 구현 파일 수정 섹션을 참조하세요.

라이선스 문제에 대한 자세한 내용은 기존 ActiveX 컨트롤 업그레이드의 라이선스 문제를 참조하세요.

참고 항목

MFC ActiveX 컨트롤
MFC ActiveX 컨트롤 마법사