dll源码如何编译-编译并封装VBA代码为DLL动态链接库

虽然通过将VBA代码编译封装成DLL动态链接库,在OFFICE中使用VBA很方便,但其功能强大,而且VBA在代码保护方面存在缺陷。 如果您的VBA项目没有设置密码保护,代码很容易被浏览甚至被盗。 而且即使设置了密码保护,也很容易被破解。 为此,如果你想真正保护VBA代码,让别人很难或很难破解你的VBA代码,我们可以将VBA代码编译成DLL动态链接库,也就是封装成DLL。 以下是与此相关的方法,希望对您有所帮助。 1、为什么要编译成DLL? 我们知道,Visual C++、Visual Basic、C++Builder、Delphi等编译器编译出来的程序不容易被破解(相对而言)。 这是因为代码被编译成可执行文件。 或者动态链接库文件。 那么dll源码如何编译,我们是否可以将VBA代码封装成动态链接库文件,然后用Word调用呢? 答案是肯定的。 而且这还有另一个用处,那就是可以提升代码的运行速度。 2、将VBA代码封装成动态链接库。 如果我们已经编写了一个VBA项目并且它运行没有错误。 ① 创建VB项目和日常操作,首先需要两个工具,包括Microsoft Word和Microsoft Basic 6.0。 打开Microsoft Basic 6.0,在“新建项目”中选择“ActiveXDLL”,创建一个新项目。

在属性窗口中,将项目名称更改为 VBAPrj,将类模块名称更改为 VBACls。 然后打开“项目”菜单下的“参考”,选择“Microsoft Office 11.0对象库”——这一步非常关键,一定不能错过,然后保存项目。 接下来我们要做的就是向项目添加代码。 在VBA项目中选择并复制一段名为Test procedure的代码,然后切换到VB编辑器,在VB项目管理器中选择类模块VBACls,将代码粘贴到代码编辑窗口中,这样这段代码就变成了Use the class module VBACls作为方法,然后编译项目生成dll文件(如果编译成功)。 在Word中,我们可以通过类模块VBACls构建的对象来调用该方法(具体如何调用我们会介绍)。 其实我们可以继续往项目中添加代码。 ②修改代码毕竟VBA是从VB开始的,两者之间显然存在一些差异。 为此,需要对传输到 VB 的 VBA 代码进行一些必要的更改。 A、修改VBA代码中唯一类型的对象。 如果我们添加的代码包含由VBA特定类型(例如Document、Rang、BookMark等)构建的对象,则在编译过程中会提示错误,因为VB无法识别这些对象。 改变这个时间的方法是将这些对象作为过程或函数的参数传递。 需要注意的是,这些参数的类型都设置为Object。

dll源码如何编译_源码编译安装_源码编译是什么意思

例如,我们需要在流程Test中访问对象ThisDocument,而VB很难识别ThisDocument,所以我们在流程test中添加一个参数Doc来传递ThisDocument,即Test可以定义为Test(DocAsObject )。 B、修改VBA特有的公共变​​量。 VB也很难识别VBA特有的公共变​​量,例如ProtectType。 同样,我们也将它们作为后过程函数的参数传递,但它们的类型名称始终设置为 Variant。 C.修改VBA特有的常量。 如果VBA代码中出现这样一句话:ProtectionType=wdNoProtection就非常明显了。 wdNoProtection是Word特有的常量,VB无法识别,因此无法通过编译。 如何解决这个问题呢? 事实上,我们可以通过改变变量来改变它。 而聪明的读者会想:如果我们知道wdNoProtection的值,我们可以直接将该值赋给ProtectionType。 那么随之而来的一个问题是:我们如何获取wdNoProtection的值呢? 方法很简单,就是让Word“打开”来告诉我们。 在文字风暴中添加下面这句话:MsgBoxCStr(wdNoProtection) 其中CStr是类型转换函数,返回参数对应的字符串。

只要在Word中触发这个事件,就会弹出一个对话框窗口,显示“T”,这就是Word告诉我们的:wdNoProtection的值为-1。 所以我们可以将ProtectionType=wdNoProtection这句改为ProtectionType=-1,到这里问题就解决了。 3、封装用户表单 我们还可以将用户表单封装到动态链接库文件中。 首先打开Word的VBA编辑器,在项目资源管理器中选择用户表单,右键单击,选择“导出文件”,选择路径,保存表单文件。 然后切换到VB编辑器,选择“项目”菜单中的“添加文件”命令,添加保存的表单文件。 添加完成后,我们会发现VB编辑器中Project Explorer中的设计器中出现了新添加的表单的名称。 选择并双击后dll源码如何编译,添加的用户表单将在表单编辑器中突出显示。 到这里,读者会问:如果表单还有代码怎么办? 别担心,尝试一下下面的操作,你就会明白问题不再是问题了。 在项目资源管理器中选择用户表单,右键单击,然后选择“查看代码”。 您还会高兴地发现代码编辑框中出现了与表单对应的代码。 本来我们在导出表单文件的时候,也导出了表单的代​​码! 其实,当你高兴的时候,别忘了按照我们上面的方法对这类代码进行必要的修改,以保证代码能够顺利编译。

这样,Word就可以通过类模块VBACls间接调用表单了。 4、在Word中引用动态链接库。 如果我们编译生成了一个动态链接库文件VBAPrj.dll,里面就有一个类型为VBACls的模块。 该模块有一个方法 Test (DocAsObject)。 接下来我们要做的就是用Word来调用Test。 有三种方法可供选择:在Word的VBA编辑器中打开ThisDocument代码窗口,单击“工具”菜单下的“引用”命令,在引用对话框中引用动态链接库。 调用代码如下: DimVBAClsAsNewVBAPrj.VBAClsVBACls.Test(ThisDocument) 如果您知道动态链接库文件的位置,可以在ThisDocument 代码窗口中的代码中引用它。 代码如下: PrivateSubDocument_Open()OnErrorResumeNextMe.VBProject.References.AddFromFile""D:VBAPrj.dll""EndSub 将动态链接库文件复制到Word文档同级目录下,在ThisDocument代码窗口:PrivateFunctionGetProjectDoc()AsObjectOnErrorResumeNextDimVBAClsAsObjectSetVBACls=CreateObject(〃VBAPrj.VBACls〃)IfVBAClsIsNothingThenMsgBox"VBAPrj.dll必须与该文档在同一目录中!〃ExitFunctionEndIfSetGetProjectDoc=VBAClsEndFunction然后使用以下代码调用Test:DimobjPrjDocAsObjectSetobj PrjDoc=GetProjectDocCallobjPrjDoc。 Test(ThisDocument)SetobjPrjDoc=Nothing 建议大家使用第三种方法,虽然这些方法都比较麻烦,而且只要动态链接库和Word文档在同一个目录下,这样就可以保证程序的可移植性至此,我们就完成了我们的目标,这时候即使我们不对VBA项目设置密码保护,别人也很难窥探我们的代码。