我正在开发一个类似 sdk 的共享软件库(使用 C++)。该库是一个简单的dll,提供了一些功能。所以,我的第一个问题是简单的 dll 可以进行哪些类型的试验?我不想削减试用dll的功能,所以我倾向于使用time-trial。
我大致了解如何跟踪lib的使用时间,那么第二个问题是如何指示试用期到期?
目前有两个想法:
评估期到期后,库将无法加载。
或者
- 评估期到期后,库将成功加载,但会显示某种 nag-screen。
但是他们看起来都很粗糙,所以你能给一些建议吗?
谢谢!
如果我在到期后正确理解您,您不希望人们调用您的 Dll 导出表中的函数。
请注意,如果您的 Dll 加载成功,即使显示了 nag 屏幕,人们仍然可以调用您的 Dll 代码。因此,您必须通过时间检查来保护所有导出的函数。
使用唠叨屏幕有几个缺点:a) 开发人员不喜欢第三方库弹出他们自己的唠叨屏幕。b) 如果您的 lib 用于非 UI 应用程序(例如用于没有与桌面交互的服务)怎么办?
在我看来,最好的办法是允许加载库(对于您的 Dll 在其他模块的 IAT 中的情况),但如果试用期过期,则让您界面中的所有导出函数返回错误代码。这样,使用您的库的应用程序可以选择忽略您的 Dll 的功能或显示它已过期的消息。
希望这可以帮助。
当调用您的 DLL 函数之一时,您可能会引发“过期试用许可证”错误。它更明确,更容易被用户理解。
my2cents
在 (1) 中,您将不得不在 DllMain() 到期时失败。如果您的 DLL 存在于使用您的 DLL 的程序的导入表中,那就不好了。
在(2)中,您有更多选择,恕我直言,它更友好。
只需在到期时设置一个内部标志,然后显示一个唠叨对话框。
如果用户继续调用您导出的函数,您检查该标志并使对您的 DLL 的所有函数调用失败。
理想情况下,如果您的 DLL 中有一个 init 函数,则在调用 init() 时显示到期 nag 对话框并返回一个特殊代码,以便实现者也知道并存在他的程序。
HTH,埃利亚斯