Contrôles ActiveX MFC : autorisation d'un contrôle ActiveX
Le support de licence, une fonctionnalité en option pour les contrôles ActiveX, vous permet de contrôler qui peut utiliser ou distribuer le contrôle. (Pour une analyse supplémentaire des problèmes de licences de, consultez les Problèmes de Licence dans Mettre à niveau un contrôle ActiveX existant.)
Cette rubrique traite des sujets suivants :
Présentation de l'autorisation de contrôle ActiveX
Création d'un contrôle de licence
Prise en charge des licences
Personnalisation de licences d'un contrôle ActiveX
Les contrôles ActiveX qui implémentent les licences permettent, en tant que développeur de contrôle, de déterminer comment les autres utilisateurs utiliseront le contrôle ActiveX. Vous fournissez à l'acheteur de contrôle le contrôle et le fichier .LIC, avec le contrat stipulant que l'acheteur peut distribuer le contrôle, mais avec pas le fichier de .LIC, avec une application qui utilise le contrôle. Cela empêche les utilisateurs de l'application d'écrire de nouvelles applications qui utilisent le contrôle, sans vous acheter la licence de contrôle.
Présentation de l'autorisation de contrôle ActiveX
Pour fournir un support de licences des contrôles ActiveX, la classe COleObjectFactory fournit une implémentation pour plusieurs fonctions dans l'interface IClassFactory2: IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfo, et IClassFactory2::CreateInstanceLic. Lorsque le développeur d'application conteneur fait une demande pour créer une instance de contrôle, un appel à GetLicInfo est effectué pour vérifier que le fichier de contrôle .LIC est présent. Si le contrôle est autorisé, une instance de contrôle peut être créée et placée dans le conteneur. Une fois que le développeur a fini de construire l'application conteneur, un autre appel de fonction, cette fois à RequestLicKey, est effectué. Cette fonction retourne le code licence (une chaîne de caractères simple) à l'application conteneur. La clé retournée est ensuite incorporée dans l'application.
L'illustration ci-dessous montre 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 de l'application conteneur doit avoir le fichier approprié .LIC installé sur l'ordinateur de développement pour créer une instance du contrôle.
Vérification du développement de contrôle ActiveX sous licence
Le processus suivant, représenté sur l'illustration suivante, se produit lorsque l'utilisateur final exécute l'application conteneur.
Lorsque l'application démarre, une instance de contrôle à généralement besoin d'être créée. Le conteneur réalise cette opération en faisant appel à CreateInstanceLic, en passant la clé de licence incorporée en tant que paramètre. Une comparaison de chaînes est alors effectuée entre la clé de licence incorporée et la propre copie de la clé de licence du contrôle. Si la correspondance réussit, une instance de contrôle est créée et l'application continue de s'exécuter normalement. Notez que le fichier de .LIC n'a pas besoin d'être présent sur l'ordinateur de l'utilisateur de contrôle.
Vérification pendant l'exécution de contrôles ActiveX sous licence
Le contrôle des licences comprend plusieurs composants de base : code spécifique dans le fichier DLL de contrôle de l'implémentation et le fichier de licence. Le code comprend deux (ou parfois trois) appels de fonctions et une chaîne de caractères, ci-dessous référencée comme « chaîne de licence », qui contient le texte de copyright. Ces appels et la chaîne de licence se trouvent dans le fichier de contrôle de l'implémentation (.CPP). Le fichier de licence, généré par l'Assistant Contrôle ActiveX, est un fichier texte avec une déclaration de copyright. Il est nommé en utilisant le nom du projet avec une extension en .LIC, par exemple SAMPLE.LIC. Un contrôle sous licence doit être accompagné du fichier de licence si l'utilisation de conception est nécessaire.
Création d'un contrôle de licence
Lorsque vous utilisez l'Assistant Contrôle ActiveX pour créer l'environnement de contrôle, il est facile d'y inclure la prise en charge du contrat de licence. Lorsque vous spécifiez que le contrôle doit disposer d'une licence utilisateur, l'Assistant Contrôle ActiveX ajoute du code à la classe de contrôle pour prendre en charge la licence. Ce code comprend des 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 de licence, consultez Personnalisation de licences d'un contrôle ActiveX plus loin dans cet article.
Pour ajouter la prise en charge de licence avec l'Assistant Contrôle ActiveX lorsque vous créez un projet de contrôle
- Suivez les instructions de Créer un contrôle ActiveX MFC. La page Paramètres de l'application de l'Assistant Contrôle ActiveX contient la possibilité de créer le contrôle avec la licence utilisateur.
L'Assistant de Contrôle ActiveX génère maintenant une infrastructure de contrôle ActiveX qui inclut la prise en charge de base du contrat de licence. Pour une explication détaillée du code de licence, consultez la rubrique suivante.
Prise en charge des licences
Lorsque vous utilisez l'Assistant Contrôle ActiveX pour ajouter la prise en charge du contrat de licence à un contrôle ActiveX, l'Assistant Contrôle ActiveX ajoute le code qui déclare et implémente la fonctionnalité du contrat de licence à l'en-tête de contrôle et aux fichiers d'implémentation. Ce code est composé d'une fonction membre VerifyUserLicense et d'une fonction membre GetLicenseKey, qui remplacent les implémentations par défaut présentes dans COleObjectFactory. Les fonctions suivantes extraient et vérifient la licence de contrôle.
Notes
Une troisième fonction membre, VerifyLicenseKey n'est pas générée par l'Assistant Contrôle ActiveX, mais elle peut être remplacée pour personnaliser le comportement de la vérification du code licence.
Ces fonctions membres sont:
-
Vérifie que le contrôle permette l'utilisation de conception en vérifiant le système pour la présence du fichier de licence de contrôle. Cette fonction est appelée par l'environnement dans le cadre du traitement IClassFactory2::GetLicInfo et IClassFactory::CreateInstanceLic.
-
Demande une clé unique à la DLL de contrôle. Cette clé est incorporée dans l'application conteneur et utilisée ultérieurement, en conjonction avec VerifyLicenseKey, pour créer une instance du contrôle. Cette fonction est appelée par l'environnement dans le cadre du traitement IClassFactory2::RequestLicKey.
-
Vérifie que la clé incorporée et la clé unique de contrôle sont identiques. Cela autorise le conteneur de créer une instance de contrôle pour son usage. Cette fonction est appelée par l'environnement dans le cadre du traitement IClassFactory2::CreateInstanceLic et peut être remplacée pour fournir une vérification personnalisée du code licence. L'implémentation par défaut effectue une comparaison de chaînes. Pour plus d'informations, consultez Personnalisation de licences d'un contrôle ActiveX, plus loin dans cet article.
Modifications du fichier d'en-tête
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 l'objet factory de CSampleCtrlsont déclarées, une qui vérifie la présence du fichier de contrôle .LIC et une autre qui récupère le code 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
Assistant Contrôle ActiveX place les deux instructions suivantes dans le fichier d'implémentation du 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 ";
Notes
Si vous modifiez szLicString de quelque manière, vous devez également modifier la première ligne du fichier du contrôle .LIC ou l'autorisation de licence ne fonctionnera pas correctement.
Assistant Contrôle ActiveX place le code suivant dans le fichier d'implémentation du contrôle pour définir les classes de contrôle VerifyUserLicense ainsi que les fonctions GetLicenseKey:
// 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, Assistant Contrôle ActiveX modifie le fichier .IDL de projet de contrôle. Le mot clé licence est ajouté à la déclaration de coclasse de contrôle, comme dans l'exemple suivant :
[ uuid(913E450B-E720-4C71-BCDF-71C96EE98FEB), licensed,
helpstring("MyAxUI Control"), control ]
coclass NVC_MFC_AxUI
Personnalisation de licences d'un contrôle ActiveX
Comme VerifyUserLicense, GetLicenseKey, et 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 licences du contrôle.
Par exemple, vous pouvez fournir plusieurs niveaux de licences pour contrôle en remplaçant les fonctions membres VerifyUserLicense ou VerifyLicenseKey. Dans cette fonction vous pouvez régler quelles propriétés ou méthodes sont exposées à l'utilisateur selon le niveau de licence que vous avez détecté.
Vous pouvez également ajouter du code à la fonction VerifyLicenseKey qui fournit une méthode personnalisée pour avertir l'utilisateur que la création de contrôle a échoué. Par exemple, dans votre fonction membre VerifyLicenseKey vous pouvez afficher un message dans une boîte de dialogue indiquant que le contrôle n'a pas été initialisé et pourquoi.
Notes
Une autre façon de personnaliser la vérification de licence du contrôle ActiveX consiste à vérifier l'enregistrement de la base de données 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 une analyse supplémentaire des problèmes de licences, consultez les Problèmes de Licence dans Mettre à niveau un contrôle ActiveX existant.)
Voir aussi
Référence
Contrôle ActiveX MFC (Assistant)