Contrôles ActiveX MFC : gestion des licences d'un contrôle ActiveX

La prise en charge des licences, une fonctionnalité facultative des contrôles ActiveX, vous permet de contrôler qui est en mesure d’utiliser ou de distribuer le contrôle. (Pour plus d’informations sur les problèmes de licence, consultez Problèmes de licence dans Mise à niveau d’un contrôle ActiveX existant.)

Important

ActiveX est une technologie héritée qui ne doit pas être utilisée pour le nouveau développement. Pour plus d’informations sur les technologies modernes qui remplacent ActiveX, consultez Contrôles ActiveX.

Cet article aborde les thèmes suivants :

Les contrôles ActiveX qui implémentent des licences vous permettent, en tant que développeur de contrôles, de déterminer la façon dont d’autres personnes utiliseront le contrôle ActiveX. Vous fournissez à l’acheteur de contrôle le contrôle et . Fichier LIC, avec le contrat que l’acheteur peut distribuer le contrôle, mais pas le . Fichier LIC, avec une application qui utilise le contrôle. Cela empêche les utilisateurs de cette application d’écrire de nouvelles applications qui utilisent le contrôle, sans d’abord licencer le contrôle à partir de vous.

Vue d’ensemble des licences de contrôle ActiveX

Pour prendre en charge les licences pour les contrôles ActiveX, la classe COleObjectFactory fournit une implémentation pour plusieurs fonctions dans l’interface IClassFactory2 : IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfoet IClassFactory2::CreateInstanceLic. Lorsque le développeur d’applications conteneur effectue une demande de création d’une instance du contrôle, un appel est GetLicInfo effectué pour vérifier que le contrôle . Le fichier LIC est présent. Si le contrôle est concédé sous licence, une instance du contrôle peut être créée et placée dans le conteneur. Une fois que le développeur a terminé de construire l’application conteneur, un autre appel de fonction, cette fois-ci, RequestLicKeyest effectué. Cette fonction retourne une clé de licence (une chaîne de caractères simple) à l’application conteneur. La clé retournée est ensuite incorporée dans l’application.

La figure ci-dessous illustre la vérification de licence d’un contrôle ActiveX qui sera utilisé pendant le développement d’une application conteneur. Comme mentionné précédemment, le développeur d’applications conteneur doit avoir le bon . Fichier LIC installé sur l’ordinateur de développement pour créer une instance du contrôle.

Licensed ActiveX control verified at development.
Vérification d’un contrôle ActiveX sous licence pendant le développement

Le processus suivant, illustré dans la figure suivante, se produit lorsque l’utilisateur final exécute l’application conteneur.

Lorsque l’application est démarrée, une instance du contrôle doit généralement être créée. Le conteneur effectue cette opération en effectuant un appel à CreateInstanceLic, en passant la clé de licence incorporée en tant que paramètre. Une comparaison de chaînes est ensuite effectuée entre la clé de licence incorporée et la propre copie du contrôle de la clé de licence. Si la correspondance réussit, une instance du contrôle est créée et l’application continue à s’exécuter normalement. Notez que le . Le fichier LIC n’a pas besoin d’être présent sur l’ordinateur de l’utilisateur de contrôle.

Licensed ActiveX control verified at execution.
Vérification d’un contrôle ActiveX sous licence pendant l’exécution

La gestion des licences de contrôle se compose de deux composants de base : du code spécifique dans la DLL d’implémentation de contrôle et le fichier de licence. Le code est composé de deux appels de fonction (ou éventuellement trois) et d’une chaîne de caractères, appelée ci-après « chaîne de licence », contenant une notification de copyright. Ces appels et la chaîne de licence se trouvent dans l’implémentation du contrôle (. Fichier CPP). Le fichier de licence, généré par l’Assistant Contrôle ActiveX, est un fichier texte avec une instruction de copyright. Elle est nommée à l’aide du nom du projet avec un . Extension LIC, par exemple SAMPLE. LIC. Un contrôle sous licence doit être accompagné du fichier de licence si l’utilisation au moment du design est nécessaire.

Création d’un contrôle sous licence

Lorsque vous utilisez l’Assistant Contrôle ActiveX pour créer l’infrastructure de contrôle, il est facile d’inclure la prise en charge des licences. Lorsque vous spécifiez que le contrôle doit avoir une licence d’exécution, l’Assistant Contrôle ActiveX ajoute du code à la classe de contrôle pour prendre en charge les licences. Le code se compose de fonctions qui utilisent une clé et un fichier de licence pour la vérification de licence. Ces fonctions peuvent également être modifiées pour personnaliser les licences de contrôle. Pour plus d’informations sur la personnalisation des licences, consultez Personnalisation des licences d’un contrôle ActiveX plus loin dans cet article.

Pour ajouter la prise en charge des licences avec l’Assistant Contrôle ActiveX lorsque vous créez votre projet de contrôle

  1. Utilisez les instructions de création d’un contrôle ActiveX MFC. La page Application Paramètres de l’Assistant Contrôle ActiveX contient l’option permettant de créer le contrôle avec la licence d’exécution.

L’Assistant Contrôle ActiveX génère désormais une infrastructure de contrôle ActiveX qui inclut la prise en charge des licences de base. Pour obtenir une explication détaillée du code de licence, consultez la rubrique suivante.

Support des licences

Lorsque vous utilisez l’Assistant Contrôle ActiveX pour ajouter la prise en charge des licences à un contrôle ActiveX, l’Assistant Contrôle ActiveX ajoute du code qui déclare et implémente la fonctionnalité de licence est ajouté aux fichiers d’en-tête et d’implémentation du contrôle. Ce code est composé d’une VerifyUserLicense fonction membre et d’une GetLicenseKey fonction membre, qui remplacent les implémentations par défaut trouvées dans COleObjectFactory . Ces fonctions récupèrent et vérifient la licence de contrôle.

Remarque

Une troisième fonction membre n’est VerifyLicenseKey pas générée par l’Assistant Contrôle ActiveX, mais peut être remplacée pour personnaliser le comportement de vérification de clé de licence.

Ces fonctions membres sont les suivantes :

  • VerifyUserLicense

    Vérifie que le contrôle autorise l’utilisation au moment du design en case activée le système pour la présence du fichier de licence de contrôle. Cette fonction est appelée par l’infrastructure dans le cadre du traitement IClassFactory2::GetLicInfo et IClassFactory::CreateInstanceLic.

  • GetLicenseKey

    Demande une clé unique à partir de la DLL de contrôle. Cette clé est incorporée dans l’application conteneur et utilisée ultérieurement, conjointement avec VerifyLicenseKey, pour créer une instance du contrôle. Cette fonction est appelée par l’infrastructure dans le cadre du traitement IClassFactory2::RequestLicKey.

  • VerifyLicenseKey

    Vérifie que la clé incorporée et la clé unique du contrôle sont identiques. Cela permet au conteneur de créer une instance du contrôle pour son utilisation. Cette fonction est appelée par l’infrastructure dans le cadre du traitement IClassFactory2::CreateInstanceLic et peut être remplacée pour fournir une vérification personnalisée de la clé de licence. L’implémentation par défaut effectue une comparaison de chaînes. Pour plus d’informations, consultez Personnalisation des licences d’un contrôle ActiveX, plus loin dans cet article.

Modifications du fichier d’en-tête

L’Assistant Contrôle ActiveX place le code suivant dans le fichier d’en-tête de contrôle. Dans cet exemple, deux fonctions membres de CSampleCtrll’objet factory sont déclarées, une qui vérifie la présence du contrôle. Fichier LIC et un autre qui récupère la clé de licence à utiliser dans l’application contenant le contrôle :

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

Modifications du fichier d’implémentation

L’Assistant Contrôle ActiveX place les deux instructions suivantes dans le fichier d’implémentation de contrôle pour déclarer le nom de fichier de licence et la chaîne de licence :

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

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

Remarque

Si vous modifiez szLicString de quelque manière que ce soit, vous devez également modifier la première ligne du contrôle. Le fichier LIC ou les licences ne fonctionnent pas correctement.

L’Assistant Contrôle ActiveX place le code suivant dans le fichier d’implémentation de contrôle pour définir les fonctions et GetLicenseKey la classe de VerifyUserLicense contrôle :

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

Enfin, l’Assistant Contrôle ActiveX modifie le projet de contrôle. Fichier IDL. Le mot clé sous licence est ajouté à la déclaration de coclasse du contrôle, comme dans l’exemple suivant :

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

Personnalisation des licences d’un contrôle ActiveX

Étant donné que VerifyUserLicense, GetLicenseKeyet VerifyLicenseKey sont déclarés en tant que fonctions membres virtuelles de la classe de fabrique de contrôle, vous pouvez personnaliser le comportement de licence du contrôle.

Par exemple, vous pouvez fournir plusieurs niveaux de licence pour le contrôle en remplaçant les fonctions membres ou VerifyLicenseKey les VerifyUserLicense fonctions membres. Dans cette fonction, vous pouvez ajuster les propriétés ou méthodes exposées à l’utilisateur en fonction du niveau de licence détecté.

Vous pouvez également ajouter du code à la VerifyLicenseKey fonction qui fournit une méthode personnalisée pour informer l’utilisateur que la création du contrôle a échoué. Par exemple, dans votre VerifyLicenseKey fonction membre, vous pouvez afficher une boîte de message indiquant que le contrôle n’a pas pu initialiser et pourquoi.

Remarque

Une autre façon de personnaliser la vérification des licences de contrôle ActiveX consiste à case activée la base de données d’inscription pour une clé de Registre spécifique, au lieu d’appeler AfxVerifyLicFile. Pour obtenir un exemple de l’implémentation par défaut, consultez la section Modifications du fichier d’implémentation de cet article.

Pour plus d’informations sur les problèmes de licence, consultez Problèmes de licence dans la mise à niveau d’un contrôle ActiveX existant.

Voir aussi

Contrôles ActiveX MFC
Contrôle ActiveX MFC, Assistant