如何让 Xll 停止工作(如果许可证无效)?
How to make Xll stop working (if license is invalid)?
所以,如果我想编写一个 Xll 并许可代码,那么我需要一个点来检查许可文件,如果许可无效,那么我希望 Xll 停止工作。
我发现 xlAutoOpen 看起来是检查许可证文件的好地方。我还看到根据文档 xlAutoOpen 必须 return 1,如果 returned 不是 1 会怎样?我可以中止 Xll 打开吗?我可以强制卸载吗?
有没有更好的地方可以查证,拒绝营业。当然,我不必等到第一个工作表函数调用。
我目前不熟悉这个框架,所以请原谅新手。
编辑:我想我可以拒绝调用 xlfRegister。这将阻止操作。
EDIT2:来自 Excel SDK 帮助文件
xlAutoAdd ... can be used to ... check licensing information, for example.
此外,发现 MSDN xlAutoAdd
您应该检查 xlAutoOpen
中的许可信息,因为此函数是激活 XLL 的第一个入口点并且 总是 由 Excel 调用。如果密码无效,只需 returns 0 表示 excel 和 不注册您的 UDF(在调用 xlfRegister
之前退出)。
I have noticed that if you register your UDFs and that you returns 0 ,
the xll is still loaded and UDFs are available, so the return
variable from xlAutoOpen
does not seem to be taken into account by
Excel but by convention I believe it is better to keep returning zero
to indicate failure.
我认为 MSDN 文档具有误导性。
xlAutoAdd
不适合检查许可证,因为它是一个可选函数 只有 当插件管理器添加 XLL 或将其作为文档打开时才会调用 (使用 File/Open)。我假设您可能拥有试用许可证,因此如果用户的许可证仍然有效,您应该在每次加载时检查它。
例子
通常,您从 xlAutoAdd
调用 xlAutoOpen
,因此您的检查仍会完成:
伪代码:
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;
}
因为 xlAutoOpen
总是被 Excel 调用,你应该在其中执行类似的检查:
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 也不需要。我个人不使用这个功能。
所以,如果我想编写一个 Xll 并许可代码,那么我需要一个点来检查许可文件,如果许可无效,那么我希望 Xll 停止工作。
我发现 xlAutoOpen 看起来是检查许可证文件的好地方。我还看到根据文档 xlAutoOpen 必须 return 1,如果 returned 不是 1 会怎样?我可以中止 Xll 打开吗?我可以强制卸载吗?
有没有更好的地方可以查证,拒绝营业。当然,我不必等到第一个工作表函数调用。
我目前不熟悉这个框架,所以请原谅新手。
编辑:我想我可以拒绝调用 xlfRegister。这将阻止操作。
EDIT2:来自 Excel SDK 帮助文件
xlAutoAdd ... can be used to ... check licensing information, for example.
此外,发现 MSDN xlAutoAdd
您应该检查 xlAutoOpen
中的许可信息,因为此函数是激活 XLL 的第一个入口点并且 总是 由 Excel 调用。如果密码无效,只需 returns 0 表示 excel 和 不注册您的 UDF(在调用 xlfRegister
之前退出)。
I have noticed that if you register your UDFs and that you returns 0 , the xll is still loaded and UDFs are available, so the return variable from
xlAutoOpen
does not seem to be taken into account by Excel but by convention I believe it is better to keep returning zero to indicate failure.
我认为 MSDN 文档具有误导性。
xlAutoAdd
不适合检查许可证,因为它是一个可选函数 只有 当插件管理器添加 XLL 或将其作为文档打开时才会调用 (使用 File/Open)。我假设您可能拥有试用许可证,因此如果用户的许可证仍然有效,您应该在每次加载时检查它。
例子
通常,您从 xlAutoAdd
调用 xlAutoOpen
,因此您的检查仍会完成:
伪代码:
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;
}
因为 xlAutoOpen
总是被 Excel 调用,你应该在其中执行类似的检查:
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 也不需要。我个人不使用这个功能。