Controlli ActiveX MFC: licenze di un controllo ActiveX

Il supporto delle licenze, una funzionalità facoltativa dei controlli ActiveX, consente di controllare chi può usare o distribuire il controllo. Per altre informazioni sui problemi di licenza, vedere Problemi di licenza in Aggiornamento di un controllo ActiveX esistente.

Importante

ActiveX è una tecnologia legacy che non deve essere usata per il nuovo sviluppo. Per altre informazioni sulle tecnologie moderne che sostituisce ActiveX, vedere Controlli ActiveX.

Questo articolo tratta gli argomenti seguenti:

I controlli ActiveX che implementano le licenze consentono, come sviluppatore di controlli, di determinare in che modo altri utenti useranno il controllo ActiveX. Si fornisce all'acquirente del controllo il controllo e . File LIC, con il contratto che l'acquirente può distribuire il controllo, ma non il . File LIC, con un'applicazione che usa il controllo . Ciò impedisce agli utenti di tale applicazione di scrivere nuove applicazioni che usano il controllo, senza prima concedere licenze al controllo.

Panoramica delle licenze di controllo ActiveX

Per fornire il supporto delle licenze per i controlli ActiveX, la classe COleObjectFactory fornisce un'implementazione per diverse funzioni nell'interfaccia IClassFactory2 : IClassFactory2::RequestLicKey, IClassFactory2::GetLicInfoe IClassFactory2::CreateInstanceLic. Quando lo sviluppatore dell'applicazione contenitore effettua una richiesta per creare un'istanza del controllo, viene effettuata una chiamata a GetLicInfo per verificare che il controllo . Il file LIC è presente. Se il controllo è concesso in licenza, è possibile creare e inserire un'istanza del controllo nel contenitore. Al termine della costruzione dell'applicazione contenitore da parte dello sviluppatore, viene eseguita un'altra chiamata di funzione, questa volta a RequestLicKey. Questa funzione restituisce una chiave di licenza (una stringa di caratteri semplice) all'applicazione contenitore. La chiave restituita viene quindi incorporata nell'applicazione.

La figura seguente illustra la verifica della licenza di un controllo ActiveX che verrà usato durante lo sviluppo di un'applicazione contenitore. Come accennato in precedenza, lo sviluppatore dell'applicazione contenitore deve avere il corretto . File LIC installato nel computer di sviluppo per creare un'istanza del controllo.

Licensed ActiveX control verified at development.
Verifica di un controllo ActiveX con licenza durante lo sviluppo

Il processo successivo, illustrato nella figura seguente, si verifica quando l'utente finale esegue l'applicazione contenitore.

All'avvio dell'applicazione, è in genere necessario creare un'istanza del controllo. A tale scopo, il contenitore esegue una chiamata a CreateInstanceLic, passando la chiave di licenza incorporata come parametro. Viene quindi eseguito un confronto di stringhe tra il codice di licenza incorporato e la copia del codice di licenza del controllo. Se la corrispondenza ha esito positivo, viene creata un'istanza del controllo e l'applicazione continua a essere eseguita normalmente. Si noti che . Il file LIC non deve essere presente nel computer dell'utente del controllo.

Licensed ActiveX control verified at execution.
Verifica di un controllo ActiveX con licenza durante l'esecuzione

Le licenze di controllo sono costituite da due componenti di base: codice specifico nella DLL di implementazione del controllo e nel file di licenza. Il codice è composto da due (o possibilmente tre) chiamate di funzione e una stringa di caratteri, in seguito denominata "stringa di licenza", contenente un avviso sul copyright. Queste chiamate e la stringa di licenza sono disponibili nell'implementazione del controllo (. File CPP). Il file di licenza, generato dalla Creazione guidata controllo ActiveX, è un file di testo con un'informativa sul copyright. Viene denominato usando il nome del progetto con un oggetto . Estensione LIC, ad esempio SAMPLE. LIC. Un controllo concesso in licenza deve essere accompagnato dal file di licenza se è necessario usare in fase di progettazione.

Creazione di un controllo concesso in licenza

Quando si usa la Creazione guidata controllo ActiveX per creare il framework di controllo, è facile includere il supporto delle licenze. Quando si specifica che il controllo deve avere una licenza di runtime, la Creazione guidata controllo ActiveX aggiunge codice alla classe di controllo per supportare le licenze. Il codice è costituito da funzioni che usano una chiave e un file di licenza per la verifica della licenza. Queste funzioni possono anche essere modificate per personalizzare le licenze di controllo. Per altre informazioni sulla personalizzazione delle licenze, vedere Personalizzazione delle licenze di un controllo ActiveX più avanti in questo articolo.

Per aggiungere il supporto per le licenze con la Creazione guidata controllo ActiveX quando si crea il progetto di controllo

  1. Usare le istruzioni in Creazione di un controllo ActiveX MFC. La pagina Application Impostazioni della Creazione guidata controllo ActiveX contiene l'opzione per creare il controllo con la licenza di runtime.

La Creazione guidata controllo ActiveX genera ora un framework di controllo ActiveX che include il supporto delle licenze di base. Per una spiegazione dettagliata del codice di licenza, vedere l'argomento successivo.

Supporto per le licenze

Quando si usa la Creazione guidata controllo ActiveX per aggiungere il supporto delle licenze a un controllo ActiveX, la Creazione guidata controllo ActiveX aggiunge codice che dichiara e implementa la funzionalità di licenza viene aggiunta ai file di intestazione e implementazione del controllo. Questo codice è costituito da una VerifyUserLicense funzione membro e da una GetLicenseKey funzione membro, che esegue l'override delle implementazioni predefinite trovate in COleObjectFactory . Queste funzioni recuperano e verificano la licenza di controllo.

Nota

Una terza funzione membro non VerifyLicenseKey viene generata dalla Creazione guidata controllo ActiveX, ma può essere sottoposta a override per personalizzare il comportamento di verifica della chiave di licenza.

Queste funzioni membro sono:

  • VerifyUserLicense

    Verifica che il controllo consenta l'utilizzo in fase di progettazione controllando la presenza del file di licenza del controllo. Questa funzione viene chiamata dal framework come parte dell'elaborazione IClassFactory2::GetLicInfo e IClassFactory::CreateInstanceLic.

  • GetLicenseKey

    Richiede una chiave univoca dalla DLL del controllo. Questa chiave viene incorporata nell'applicazione contenitore e usata in seguito VerifyLicenseKey, insieme a , per creare un'istanza del controllo. Questa funzione viene chiamata dal framework come parte dell'elaborazione IClassFactory2::RequestLicKeydi .

  • VerifyLicenseKey

    Verifica che la chiave incorporata e la chiave univoca del controllo siano uguali. In questo modo il contenitore può creare un'istanza del controllo per il relativo uso. Questa funzione viene chiamata dal framework come parte dell'elaborazione IClassFactory2::CreateInstanceLic e può essere sottoposta a override per fornire la verifica personalizzata del codice di licenza. L'implementazione predefinita esegue un confronto tra stringhe. Per altre informazioni, vedere Personalizzazione delle licenze di un controllo ActiveX, più avanti in questo articolo.

Modifiche ai file di intestazione

La Creazione guidata controllo ActiveX inserisce il codice seguente nel file di intestazione del controllo. In questo esempio vengono dichiarate due funzioni membro dell'oggetto CSampleCtrlfactory , una che verifica la presenza del controllo . File LIC e un altro che recupera la chiave di licenza da usare nell'applicazione contenente il controllo :

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

Modifiche ai file di implementazione

La Procedura guidata controllo ActiveX inserisce le due istruzioni seguenti nel file di implementazione del controllo per dichiarare il nome file di licenza e la stringa di licenza:

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

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

Nota

Se si modifica szLicString in qualsiasi modo, è necessario modificare anche la prima riga nel controllo . Il file LIC o le licenze non funzioneranno correttamente.

La Creazione guidata controllo ActiveX inserisce il codice seguente nel file di implementazione del controllo per definire le funzioni e GetLicenseKey la classe di VerifyUserLicense controllo:

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

Infine, la Creazione guidata controllo ActiveX modifica il progetto di controllo . File IDL. La parola chiave licensed viene aggiunta alla dichiarazione coclasse del controllo, come nell'esempio seguente:

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

Personalizzazione delle licenze di un controllo ActiveX

Poiché VerifyUserLicense, GetLicenseKeye VerifyLicenseKey vengono dichiarati come funzioni membro virtuali della classe control factory, è possibile personalizzare il comportamento delle licenze del controllo.

Ad esempio, è possibile fornire diversi livelli di licenza per il controllo eseguendo l'override delle VerifyUserLicense funzioni membro o VerifyLicenseKey . All'interno di questa funzione è possibile modificare le proprietà o i metodi esposti all'utente in base al livello di licenza rilevato.

È anche possibile aggiungere codice alla VerifyLicenseKey funzione che fornisce un metodo personalizzato per informare l'utente che la creazione del controllo non è riuscita. Ad esempio, nella VerifyLicenseKey funzione membro è possibile visualizzare una finestra di messaggio che informa che il controllo non è riuscito a inizializzare e perché.

Nota

Un altro modo per personalizzare la verifica della licenza del controllo ActiveX consiste nel controllare il database di registrazione per una chiave del Registro di sistema specifica, anziché chiamare AfxVerifyLicFile. Per un esempio dell'implementazione predefinita, vedere la sezione Implementazione delle modifiche ai file di questo articolo.

Per altre informazioni sui problemi di licenza, vedere Problemi di licenza in Aggiornamento di un controllo ActiveX esistente.

Vedi anche

Controlli ActiveX MFC
Creazione guidata controllo ActiveX MFC