2017-08-08 2 views
1

Donc, si je veux écrire un Xll et licence le code, alors j'ai besoin d'un point où vérifier le fichier de licence et si la licence est invalide, alors je veux que le Xll cesse de fonctionner. Je vois xlAutoOpen ressemble à un bon endroit pour inspecter le fichier de licence. Je vois aussi que xlAutoOpen doit retourner 1 selon la documentation, que se passe-t-il si quelque chose d'autre que 1 est retourné? Puis-je annuler l'ouverture de Xll? Puis-je forcer un déchargement?Comment faire pour que Xll cesse de fonctionner (si la licence est invalide)?

Y a-t-il de meilleurs endroits pour vérifier la licence et refuser de fonctionner? Sûrement, je ne dois pas attendre jusqu'à l'invocation de la première fonction de feuille de calcul.

Je ne suis pas familier avec ce cadre actuellement si pardonnant newbie-ness.

EDIT: Je suppose que je peux refuser d'appeler xlfRegister. Cela empêchera l'opération.

EDIT2: A partir de l'Excel SDK fichier d'aide

xlAutoAdd ... peut être utilisé pour ... vérifier les informations de licence, par exemple.

En outre, constaté que sur MSDN xlAutoAdd

Répondre

1

Vous devriez vérifier les informations de licence dans xlAutoOpen puisque cette fonction est le premier point d'entrée pour activer le XLL et est toujours appelé par Excel. Si le mot de passe est invalide, il retourne 0 pour indiquer l'échec de l'exécution et ne pas enregistrer vos UDF (quittez avant d'appeler xlfRegister).

J'ai remarqué que si vous enregistrez votre UDFs et que vous renvoie 0, XLL est toujours chargé et des FDU sont disponibles, la variable de retour de xlAutoOpen ne semble pas être pris en compte par Excel mais par convention je crois qu'il est préférable de continuer à renvoyer zéro pour indiquer l'échec.

Je crois que le document MSDN est trompeur. xlAutoAdd ne convient pas pour vérifier la licence car il s'agit d'une fonction facultative appelée uniquement lorsque le fichier XLL est ajouté par le Gestionnaire de compléments ou lorsqu'il est ouvert en tant que document (en utilisant Fichier/Ouvrir). Je suppose que vous pouvez avoir une licence d'essai et que vous devriez le vérifier à chaque chargement si la licence de l'utilisateur est toujours valide.


Exemple

Habituellement, vous appelez xlAutoOpen de xlAutoAdd de sorte que votre chèque sera fait encore: pseudo-code:

int __stdcall xlAutoAdd(void) 
    { 

    if(!Isinitialised) 
     if(xlAutoOpen() == 0) // licence check is still performed 
     returns 0 ; 
     ... 

     MessageBoxA(GetActiveWindow(), "Thank you to install ...", "AutoOpen", MB_OK); 

    Isinitialised = true; 
} 

depuis xlAutoOpen est toujours appelée par Excel, vous devez effectuer une vérification similaire à l'intérieur:

bool Isinitialised = false; 
int __stdcall xlAutoOpen(void) // Register the functions 
{ 

    if(Isinitialised) 
     return 1; 

    if(!ValidLicense()) // check licence in xlAutoOpen 
     return 0; 

    // continue initialization , registration .. 

    ..... 
    Isinitialised = true; 
    } 

Enfin, notez que vous pouvez omettre xlAutoAdd car cela n'a aucune conséquence négative et n'est pas requis par Excel. Personnellement, je n'utilise pas cette fonction.