MFC-ActiveX-Steuerelemente: Lizenzieren eines ActiveX-Steuerelements

Mit der Lizenzierungsunterstützung, einem optionalen Feature von ActiveX-Steuerelementen, können Sie steuern, wer das Steuerelement verwenden oder verteilen kann. (Weitere Erläuterungen zu Lizenzierungsproblemen finden Sie unter Lizenzierungsprobleme in Aktualisieren eines vorhandenen ActiveX-Steuerelements.)

Wichtig

ActiveX ist eine Legacytechnologie, die nicht für neue Software verwendet werden sollte. Weitere Informationen zu modernen Technologien, die ActiveX ablösen, finden Sie unter ActiveX-Steuerelemente.

In diesem Artikel werden die folgenden Themen behandelt:

ActiveX-Steuerelemente, die die Lizenzierung implementieren, ermöglichen Es Ihnen als Steuerelemententwickler, zu bestimmen, wie andere Personen das ActiveX-Steuerelement verwenden. Sie stellen dem Steuerelementkäufer das Steuerelement und . LIC File, mit der Vereinbarung, dass der Käufer die Kontrolle verteilen kann, aber nicht die . LIC-Datei mit einer Anwendung, die das Steuerelement verwendet. Dadurch wird verhindert, dass Benutzer dieser Anwendung neue Anwendungen schreiben, die das Steuerelement verwenden, ohne zuerst das Steuerelement von Ihnen zu lizenzieren.

Übersicht über die ActiveX-Steuerelementlizenzierung

Zur Bereitstellung der Lizenzierungsunterstützung für ActiveX-Steuerelemente stellt die COleObjectFactory-Klasse eine Implementierung für mehrere Funktionen in der IClassFactory2 Schnittstelle bereit: IClassFactory2::RequestLicKey, und IClassFactory2::GetLicInfoIClassFactory2::CreateInstanceLic. Wenn der Entwickler der Containeranwendung eine Anforderung zum Erstellen einer Instanz des Steuerelements vorgibt, wird ein Aufruf GetLicInfo ausgeführt, um zu überprüfen, ob das Steuerelement. LIC-Datei ist vorhanden. Wenn das Steuerelement lizenziert ist, kann eine Instanz des Steuerelements erstellt und im Container platziert werden. Nachdem der Entwickler die Erstellung der Containeranwendung abgeschlossen hat, wird ein weiterer Funktionsaufruf ausgeführt, zu diesem Zeitpunkt RequestLicKey. Diese Funktion gibt einen Lizenzschlüssel (eine einfache Zeichenfolge) an die Containeranwendung zurück. Der zurückgegebene Schlüssel wird dann in die Anwendung eingebettet.

Die folgende Abbildung zeigt die Lizenzüberprüfung eines ActiveX-Steuerelements, das während der Entwicklung einer Containeranwendung verwendet wird. Wie zuvor Erwähnung, muss der Containeranwendungsentwickler über die richtigen verfügen. LIC-Datei, die auf dem Entwicklungscomputer installiert ist, um eine Instanz des Steuerelements zu erstellen.

Licensed ActiveX control verified at development.
Überprüfung eines lizenzierten ActiveX-Steuerelements während der Entwicklung

Der nächste Prozess, der in der folgenden Abbildung dargestellt wird, tritt auf, wenn der Endbenutzer die Containeranwendung ausführt.

Wenn die Anwendung gestartet wird, muss in der Regel eine Instanz des Steuerelements erstellt werden. Der Container führt dazu einen Aufruf CreateInstanceLicdurch, wobei der eingebettete Lizenzschlüssel als Parameter übergeben wird. Anschließend wird ein Zeichenfolgenvergleich zwischen dem eingebetteten Lizenzschlüssel und der eigenen Kopie des Lizenzschlüssels vorgenommen. Wenn die Übereinstimmung erfolgreich ist, wird eine Instanz des Steuerelements erstellt, und die Anwendung wird weiterhin normal ausgeführt. Beachten Sie, dass die . Die LIC-Datei muss nicht auf dem Computer des Steuerelementbenutzers vorhanden sein.

Licensed ActiveX control verified at execution.
Überprüfung eines lizenzierten ActiveX-Steuerelements während der Ausführung

Die Steuerungslizenzierung besteht aus zwei grundlegenden Komponenten: spezifischem Code in der Steuerungsimplementierungs-DLL und der Lizenzdatei. Der Code besteht aus zwei (oder möglicherweise drei) Funktionsaufrufen und einer Zeichenfolge, die nachfolgend als "Lizenzzeichenfolge" bezeichnet wird, die einen Copyrighthinweis enthält. Diese Aufrufe und die Lizenzzeichenfolge finden Sie in der Steuerelementimplementierung (. CPP)-Datei. Die lizenzdatei, die vom ActiveX-Steuerelement-Assistenten generiert wird, ist eine Textdatei mit einer Copyright-Anweisung. Er wird mit dem Projektnamen mit einem Benannten benannt. LIC-Erweiterung, z. B. SAMPLE. LIC. Ein lizenziertes Steuerelement muss von der Lizenzdatei begleitet werden, wenn entwurfszeitbezogene Verwendung erforderlich ist.

Erstellen eines lizenzierten Steuerelements

Wenn Sie den ActiveX-Steuerelement-Assistenten zum Erstellen des Steuerelementframeworks verwenden, ist es einfach, die Lizenzierungsunterstützung einzuschließen. Wenn Sie angeben, dass das Steuerelement über eine Laufzeitlizenz verfügen soll, fügt der ActiveX-Steuerelement-Assistent der Steuerelementklasse Code hinzu, um die Lizenzierung zu unterstützen. Der Code besteht aus Funktionen, die eine Schlüssel- und Lizenzdatei für die Lizenzüberprüfung verwenden. Diese Funktionen können auch geändert werden, um die Steuerelementlizenzierung anzupassen. Weitere Informationen zur Lizenzanpassung finden Sie weiter unten in diesem Artikel unter Anpassen der Lizenzierung eines ActiveX-Steuerelements .

So fügen Sie unterstützung für die Lizenzierung mit dem ActiveX-Steuerelement-Assistenten hinzu, wenn Sie Ihr Steuerelementprojekt erstellen

  1. Verwenden Sie die Anweisungen zum Erstellen eines MFC ActiveX-Steuerelements. Die Seite "Application Einstellungen" des ActiveX-Steuerelement-Assistenten enthält die Option zum Erstellen des Steuerelements mit der Laufzeitlizenz.

Der ActiveX-Steuerelement-Assistent generiert jetzt ein ActiveX-Steuerelementframework, das grundlegende Lizenzierungsunterstützung enthält. Eine ausführliche Erläuterung des Lizenzierungscodes finden Sie im nächsten Thema.

Lizenzierungsunterstützung

Wenn Sie den ActiveX-Steuerelement-Assistenten verwenden, um einem ActiveX-Steuerelement Lizenzierungsunterstützung hinzuzufügen, fügt der ActiveX-Steuerelement-Assistent Code hinzu, der die Lizenzierungsfunktion deklariert und implementiert, der Steuerelementheader- und Implementierungsdateien hinzugefügt wird. Dieser Code besteht aus einer VerifyUserLicense Memberfunktion und einer GetLicenseKey Memberfunktion, die die in COleObjectFactory gefundenen Standardimplementierungen überschreibt. Diese Funktionen rufen die Steuerelementlizenz ab und überprüfen sie.

Hinweis

Eine dritte Memberfunktion VerifyLicenseKey wird nicht vom ActiveX-Steuerelement-Assistenten generiert, kann jedoch überschrieben werden, um das Überprüfungsverhalten des Lizenzschlüssels anzupassen.

Diese Memberfunktionen sind:

  • VerifyUserLicense

    Überprüft, ob das Steuerelement die Entwurfszeitnutzung ermöglicht, indem das System auf das Vorhandensein der Steuerelementlizenzdatei überprüft wird. Diese Funktion wird vom Framework als Teil der Verarbeitung IClassFactory2::GetLicInfo und IClassFactory::CreateInstanceLicder Verarbeitung aufgerufen.

  • GetLicenseKey

    Fordert einen eindeutigen Schlüssel aus der Steuerelement-DLL an. Dieser Schlüssel wird in die Containeranwendung eingebettet und später in Verbindung mit VerifyLicenseKeydem Steuerelement verwendet, um eine Instanz des Steuerelements zu erstellen. Diese Funktion wird vom Framework als Teil der Verarbeitung IClassFactory2::RequestLicKeyaufgerufen.

  • VerifyLicenseKey

    Überprüft, ob der eingebettete Schlüssel und der eindeutige Schlüssel des Steuerelements identisch sind. Dadurch kann der Container eine Instanz des Steuerelements für die Verwendung erstellen. Diese Funktion wird vom Framework als Teil der Verarbeitung IClassFactory2::CreateInstanceLic aufgerufen und kann überschrieben werden, um eine angepasste Überprüfung des Lizenzschlüssels bereitzustellen. Die Standardimplementierung führt einen Zeichenfolgenvergleich durch. Weitere Informationen finden Sie unter Anpassen der Lizenzierung eines ActiveX-Steuerelements weiter unten in diesem Artikel.

Headerdateiänderungen

Der ActiveX-Steuerelement-Assistent platziert den folgenden Code in der Steuerelementkopfzeilendatei. In diesem Beispiel werden zwei Memberfunktionen des CSampleCtrlObjekts factory deklariert, eine, die das Vorhandensein des Steuerelements überprüft. LIC-Datei und eine andere Datei, die den lizenzschlüssel abruft, der in der Anwendung verwendet werden soll, die das Steuerelement enthält:

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

Implementierungsdateiänderungen

Der ActiveX-Steuerelement-Assistent platziert die folgenden beiden Anweisungen in der Steuerelementimplementierungsdatei, um den Lizenzdateinamen und die Lizenzzeichenfolge zu deklarieren:

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

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

Hinweis

Wenn Sie szLicString änderungen auf irgendeine Weise vornehmen, müssen Sie auch die erste Zeile im Steuerelement ändern. LIC-Datei oder -Lizenzierung funktioniert nicht ordnungsgemäß.

Der ActiveX-Steuerelement-Assistent platziert den folgenden Code in der Steuerelementimplementierungsdatei, um die Steuerelementklasse VerifyUserLicense und GetLicenseKey -funktionen zu definieren:

// 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);
}

Schließlich ändert der ActiveX-Steuerelement-Assistent das Steuerelementprojekt. IDL-Datei. Die lizenzierte Schlüsselwort (keyword) wird der Coclass-Deklaration des Steuerelements hinzugefügt, wie im folgenden Beispiel gezeigt:

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

Anpassen der Lizenzierung eines ActiveX-Steuerelements

Da VerifyUserLicense, GetLicenseKeyund VerifyLicenseKey werden als virtuelle Memberfunktionen der Steuerelement-Factoryklasse deklariert, können Sie das Lizenzierungsverhalten des Steuerelements anpassen.

Sie können z. B. mehrere Lizenzierungsebenen für das Steuerelement bereitstellen, indem Sie die VerifyUserLicense Funktionen oder VerifyLicenseKey Member überschreiben. In dieser Funktion können Sie anpassen, welche Eigenschaften oder Methoden dem Benutzer entsprechend der von Ihnen erkannten Lizenzebene verfügbar gemacht werden.

Sie können der Funktion auch Code hinzufügen, der VerifyLicenseKey eine angepasste Methode zum Informieren des Benutzers bereitstellt, dass die Steuerelementerstellung fehlgeschlagen ist. In Ihrer VerifyLicenseKey Memberfunktion könnten Sie beispielsweise ein Meldungsfeld anzeigen, in dem angegeben wird, dass das Steuerelement nicht initialisiert werden konnte und warum.

Hinweis

Eine weitere Möglichkeit zum Anpassen der Überprüfung der ActiveX-Steuerelementlizenz besteht darin, die Registrierungsdatenbank auf einen bestimmten Registrierungsschlüssel zu überprüfen, anstatt die Lizenz zu aufrufen AfxVerifyLicFile. Ein Beispiel für die Standardimplementierung finden Sie im Abschnitt "Implementierungsdateiänderungen" in diesem Artikel.

Weitere Erläuterungen zu Lizenzierungsproblemen finden Sie unter "Lizenzierungsprobleme beim Upgrade eines vorhandenen ActiveX-Steuerelements".

Siehe auch

MFC ActiveX Controls (MFC-ActiveX-Steuerelemente)
MFC-ActiveX-Steuerelement-Assistent