Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何将VBA代码保存到DLL库?_Excel_Dllexport_Source Code Protection_Vba - Fatal编程技术网

Excel 如何将VBA代码保存到DLL库?

Excel 如何将VBA代码保存到DLL库?,excel,dllexport,source-code-protection,vba,Excel,Dllexport,Source Code Protection,Vba,为了安全起见,我想将Excel工作簿中VBA中的宏保存到稍后从该文件调用的DLL库文件中 通过这种方式,可以将任何版本的宏部署到公司的PC机上,但没有人会看到它背后的真正代码 这怎么可能?我已经阅读到转换为C++和创建DLL。是否有任何分步解决方案?a)您可以将宏保存在单独的文件中,并使用密码对其进行保护,但存在“恢复密码”程序,该程序可能会破坏这种保护 b)虽然可以做一个C++ DLL,但是使用Visual Basic 6代替它是聪明的,因为语法与VBA非常相似。在vb6中,您可以创建COM

为了安全起见,我想将Excel工作簿中VBA中的宏保存到稍后从该文件调用的DLL库文件中

通过这种方式,可以将任何版本的宏部署到公司的PC机上,但没有人会看到它背后的真正代码

这怎么可能?我已经阅读到转换为C++和创建DLL。是否有任何分步解决方案?

a)您可以将宏保存在单独的文件中,并使用密码对其进行保护,但存在“恢复密码”程序,该程序可能会破坏这种保护


<> b)虽然可以做一个C++ DLL,但是使用Visual Basic 6代替它是聪明的,因为语法与VBA非常相似。在vb6中,您可以创建COM组件,注册它,然后将其添加到excel工作表中。

首先,让我警告您不要这样做。我们曾经在一个公司应用程序中这样做过,移植所用的时间与最初编写应用程序所用的时间大致相同。对于这一点,没有分步指南,因为你基本上是从头开始重写应用程序

其次,并不是ExcelVBA所能做的一切都必须在COM或XLL中可用。可用的事件是不同的;在XLL的情况下,所有数据类型都使用了全新的结构。在COM中没有UDF;在XLL中没有宏操作。您将无法再将代码附加到工作表(仅Excel会话),并且安装过程要复杂得多。在走上一条特定的道路之前,我会花很长时间研究VBA到底做了什么


这取决于你的应用程序有多大,但我鼓励你把钱花在制定无懈可击的许可证和进行一些基本的代码混淆(根据最初的评论),而不是从零开始使用不同的体系结构。

你没有提到你的目标Excel版本,但我会给出一个总体看法

  • 确保您的代码适用于加载项。例如:使用Active工作簿代替此工作簿
  • 还要决定是否需要创建菜单或使用快捷键,并相应地修改代码,并对其进行保护
  • 在VBE中,将IsAddin属性更改为True
  • “另存为”文件并选择Excel加载项。或者,只需保存它并将扩展名从.xls重命名为.xla即可
  • 现在要么告诉用户“打开”XLA,要么在项目中引用它,或者把它放在自动启动文件夹或…< /LI>中。
  • 你完了



  • 您可以通过将其转换为受密码保护的XLA并混淆代码来保护您的VBA代码。但是密码的安全性很弱。很容易使XLA与所有Excel版本一起工作。

    一个简单的替代方法是转换为编译的VB6自动化加载项。安全性很好,易于转换,可以处理UDF和命令加载项。但它不能与Excel 2010-64或早期版本的Excel(如XL 2000)一起使用。您将需要一个VB6编译器,这可能很难找到

    更难的选择是转换为.NET。如果您使用许多模糊器中的一个,那么安全性是合理的。除非您使用允许通过XLL接口访问.NET的工具之一,如Excel DNA或Addin Express,否则性能将很差。64位功能也可用


    如果性能和安全性很重要,你需要转换成C++ XLL,但是这是从VBA中来的困难。

    < P>转换VBA代码到C++是一个非常困难的过程,因为C++和VBA是非常不同的语言,但是这种编译到DLL文件的转换确实提供了最好的VBA代码保护

    如果你想要一个能做到这一点的工具,我推荐。它将VBA代码转换为C,并将该C代码编译为DLL文件

    这比手工将VBA代码转换为C更简单、更快。
    VBA编译器网站有一个简单的10步指南,它是如何将VBA代码编译成Windows DLL文件,它甚至不需要任何C或C++的知识。

    我不知道DLL,但是你也可以通过保护代码来实现你的目标,将它保存为一个插件,并以此方式部署它。@iDevlop:如果被50多人使用,我会选择用户addin。。对吗?@Skuta:不,另存为加载项是一个5分钟的技巧!正如Magallans所指出的那样,它不是黑客防护的,但它可以完美地防止商业用户看到代码并进行无声更新。@iDevlop:你能推荐一个网站来检查它吗?@Skuta:我添加了一个答案,并提供了一些链接。