如何使Xll停止工作(如果许可证无效)?

时间:2017-08-08 20:19:56

标签: xll

所以,如果我想写一个Xll并许可代码,那么我需要一个检查许可证文件的点,如果许可证无效,那么我希望Xll停止工作。

我看到xlAutoOpen看起来是检查许可证文件的好地方。我还看到xlAutoOpen必须根据文档返回1,如果返回1以外的其他内容会发生什么?我可以放弃Xll开放吗?我可以强行卸货吗?

是否有更好的地方检查许可证并拒绝操作。当然,我不必等到第一个工作表函数调用。

我目前不熟悉这个框架,原谅新手。

编辑:我想我可以拒绝调用xlfRegister。这将阻止操作。

EDIT2:来自Excel SDK帮助文件

  例如,

xlAutoAdd ...可用于...检查许可信息。

另外,发现在MSDN xlAutoAdd

1 个答案:

答案 0 :(得分:1)

您应该检查xlAutoOpen中的许可信息,因为此功能是激活XLL的第一个入口点,并且始终由Excel调用。如果密码无效,则返回0表示无法优秀不注册UDF(在调用xlfRegister之前退出)。

  

我注意到如果你注册你的UDF并且你返回0,   xll仍然加载,UDF可用,所以返回   来自xlAutoOpen的变量似乎没有被考虑在内   Excel,但按照惯例,我认为最好保持返回零   表示失败。

我相信MSDN doc会产生误导。 xlAutoAdd不适合检查许可证,因为当加载项管理器添加XLL或将文档作为文档打开时,它是一个可选功能,仅称为 (使用文件) /打开)。我假设您可能拥有试用许可证,因此如果用户的许可证仍然有效,您应该在每个加载时检查它。

示例

通常,您从xlAutoOpen致电xlAutoAdd,因此您的支票仍将完成: 伪代码:

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

由于Excel始终调用xlAutoOpen,因此您应该在其中执行类似的检查:

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

最后请注意,您可以省略xlAutoAdd,因为它不会产生任何不良后果,也不是Excel要求的。我个人不使用这个功能。