出于安全目的,我想将我的宏从 Excel 工作簿中的 VBA 保存到稍后从文件中调用的 DLL 库文件中。
这样就可以将我的任何版本的宏部署到公司的 PC 上,但没有人会看到它背后的真实代码。
这怎么可能?我已阅读有关转换为 C++ 和创建 DLL 的内容。有什么分步解决方案吗?
出于安全目的,我想将我的宏从 Excel 工作簿中的 VBA 保存到稍后从文件中调用的 DLL 库文件中。
这样就可以将我的任何版本的宏部署到公司的 PC 上,但没有人会看到它背后的真实代码。
这怎么可能?我已阅读有关转换为 C++ 和创建 DLL 的内容。有什么分步解决方案吗?
首先,让我警告您一般情况下不要这样做。我们曾经用一个公司应用程序这样做过,移植所用的时间与最初编写应用程序所用的时间大致相同。不存在分步指南,因为您基本上是从头开始重写应用程序。
其次,并非您的 Excel VBA 可以做的所有事情都必须在 COM 或 XLL 中可用。可用的事件不同;在 XLL 的情况下,所有数据类型都可以使用全新的结构。在 COM 中没有 UDF;在 XLL 中没有宏操作。您将无法再将代码附加到工作表(仅限 Excel 会话),并且安装过程要复杂得多。在走上一条特定的道路之前,我会花很长时间研究你的 VBA 究竟做了什么。
这取决于您的应用程序有多大,但我鼓励您将资金投入到制定无懈可击的许可证并进行一些基本的代码混淆(根据原始评论),而不是从头开始使用不同的架构。
您可以通过将 VBA 代码转换为受密码保护的 XLA 并混淆代码来保护您的 VBA 代码。但密码安全性较弱。使 XLA 与所有 Excel 版本一起工作很容易。
一个简单的替代方法是转换为已编译的 VB6 自动化插件。安全性很好,很容易转换,它可以处理 UDF 和命令插件。但它不适用于 Excel 2010-64 或早期版本的 Excel,如 XL 2000。您需要一个很难找到的 VB6 编译器。
一个更难的选择是转换为 .NET。如果您使用众多混淆器之一,那么安全性是合理的。除非您使用允许通过 XLL 接口访问 .NET 的工具之一,例如 Excel DNA 或 Addin Express,否则性能会很差。还提供 64 位功能。
如果性能和安全性很重要,您需要转换为 C++ XLL,但如果来自 VBA,这将是一项艰巨的工作。
a) 您可以将宏保存在单独的文件中并用密码保护它,但是,存在“恢复密码”的程序可能会破坏这种保护。
b) 虽然可以做一个 c++ dll,但使用 Visual Basic 6 是明智的,因为语法与 vba 非常相似。在 vb6 中,您可以创建一个 COM 组件,注册它,然后添加到您的 Excel 表中。
你没有提到你的目标 Excel 版本,但我会给出一个一般的看法。
http://www.ozgrid.com/VBA/excel-add-in-create.htm
http://excel.tips.net/Pages/T002927_Creating_AddIns.html
http://msdn.microsoft.com/en-us/图书馆/aa140936(v=office.10).aspx
将 VBA 代码转换为 C++ 是一个相当艰巨的过程,因为 C++ 和 VBA 是非常不同的语言,但是这种编译到 DLL 文件的转换确实提供了最好的 VBA 代码保护。
如果您想要一个完全可以做到这一点的工具,我会推荐VBA Compiler for Excel。它将您的 VBA 代码转换为 C 并将该 C 代码编译为 DLL 文件。
它比手动将 VBA 代码转换为 C 更容易、更快捷。VBA 编译器网站有一个简单的 10 步指南,介绍如何将 VBA 代码编译成 Windows DLL 文件https://vbacompiler.com/how-to-compile/,它甚至不需要任何 C 或 C++ 知识。