VB封装DLL实例讲解(三)

合集下载

VB封装Excel_VBA成DLL技巧

VB封装Excel_VBA成DLL技巧

VB封装Excel_VBA成DLL技巧VB封装Excel_VBA成DLL技巧使用VB6.0在WinXP_sp2、Excel 2000环境下制作、测试通过。

一、启动VB6.0:执行:“文件夹(F)”——“新建(N)”——选择“ActiveX DLL”,如下图1:二、引用:VB 中对Excel的引用执行:“工程(P)”——“引用(N)”——选择所要引用的项目:如下图2Excel 2000中:Microsoft Excel 9.0 Object LibraryMicrosoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object LibraryMicrosoft Office 11.0 Object Library三、编写代码:1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”,改为“zyg365”,2、在类模块的代码编辑区写入代码:如下图3模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名Dim XLAPP As ObjectSet XLAPP = GetObject(, "Excel.Application")代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”(或按照Sub hongtong() 中的格式编写。

)Sub hongtong()Dim excelApp As New Excel.ApplicationDim excelWorkBook As Excel.WorkbookDim excelWorksheet As Excel.WorksheetSet excelWorkBook = excelApp.Workbooks.Add '创建新工作簿Set excelWorksheet = excelWorkBook.Sheets(1) excelWorksheet.Cells(2, 3) = "宏通" '写入数据excelWorksheet.Cells(3, 4) = "zyg365" '写入数据excelApp.Visible = True '显示excel界面,用于调试excelWorkBook.PrintPreview '打印预览excelWorkBook.PrintOut '打印输出excelWorkBook.Saved = True'excelWorkBook.Close '关闭工作薄'excelApp.Quit '退出excelEnd Sub四、工程属性设置:(可以不设置,本步骤可以省略) 为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成Dll文件:1、保存:单击保存,保存到一个文件夹中;2、测试:执行工具栏上的“启动”(右向的三角图标)按钮,检查是否存在错误;3、打包生成Dll文件:执行:“文件(F)”——“生成工程1.dll(K)”(当前工程中为:“zygtest.dll”),重命名为“zyg.dll”,至此,Dll文件制作结束。

VB DLL实例分步讲解

VB DLL实例分步讲解

VB封装DLL实例讲解(一)一、DLL基本概念(一)概念DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。

DLL不是应用程序的组成部分,而是运行时链接到应用程序中。

(二)主要优点:1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;3、从ACCESS角度而言,还可以更好的确保核心代码的安全。

二、用VB封装VBA代码,构建自定义的DLL动态链接库(一)ACCESS中实例代码下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。

我将就这个实例演示如何将该实例VBA代码封装成为DLL。

按钮单击事件代码如下:Private Sub CmdFindnumber_Click()Dim strM As String '初始字符串Dim strOut As String '输出字符串变量Dim IstrM = Me.Text1'从第一个字符向最后一个字符循环,以提取每个字符For I = 1 To Len(strM)'判断是否为0到9字符,是则赋值输出If Mid(strM, I, 1) Like "[0-9]" ThenstrOut = strOut & Mid(strM, I, 1)End IfNext I'用MsgBox函数进行输出测试End Sub以上代码还不能直接用于封装,须将其修改成为公用函数(过程)(二)VB 封装实例中VBA 代码步骤一:在VB 编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口步骤二:修改工程名,这即生成的DLL 库名步骤三:修改类名步骤四:在代码窗口输入如下代码。

发布DLL封装过程教程

发布DLL封装过程教程

在代码封装前,首先要完全确认,VBA代码的完全可行性。

1.1.打开EXCEL后,跳转到【VBA编辑器】界面。

操作:【工具】-【引用】查看,在VBA里面引用了那些工具和控件。

1.2.然后打开VB6.0,创建DLL。

操作:【工程】-【引用】将VBA里面的引用的工程都在VB里面引用。

说明:这一步是很重要的,也是基础。

很多时候就是在VB里面没有引用,造成封装后不能创建对象等等故障。

打开VB6.0的新建DLL!在CLASS(CODE)里面我们把在VBA里面的类模块复制过来!二、EXCEL VBA里面建立窗体!这个是我们在VBA里面建立的窗体!这个是我们建立的VBA窗体的代码!要求:在窗体的TETXBO1里面输入后按按钮后,将此保存在表"WO"的(1,1)单元格里面!所以我们建立了如下的代码:Private Sub CommandButton1_Click()Sheets("wo").Cells(1, 1) = TextBox1.TextEnd Sub接下来我们在VBA里面建立模块!输入如下代码Sub 窗体1()测试.ShowEnd Sub要求打开测试窗体!这样我们的VBA就建立完成了!三、DLL的制作!艾昨天讲到如何建立VBA!下面是昨天讲到的VBA建立的窗体!在TEXE里面输入内容按按钮后赋值到A1单元格[attach]202296[/attach]忙自己的软件了!接下来我们转到要加载DLL的EXCEL文件,进入VBA编辑,在thisworkbook里面建立加载DLL和卸载DLL的命令。

接下来我们新建一个类模块,主要用来调用窗体和DLL里面命令的。

DIM Fun As New 测试(在加载DLL后,输入“AS” 自动可以索引“NEW” 自动索引“测试”)DLL测试--是我们建立的DLL文件名称。

测试--是我们在DLL里面的模块,在这里要AS NEW (模块) 不是DLL了!这一句我们在上面将此设置为全局变量,方便下面的语句。

vb编写DLL学习

vb编写DLL学习

怎样用VB编写DLL文件???你先打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。

编完后,保存一般是以“.cls”和“.vbw”保存。

这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。

生成以后是一个有好象齿轮状的图标。

如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。

在vb6里建新工程时选用建立dll 做好后用vb的引用就可以了VB中创建的DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。

其实MS 非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。

VB编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。

如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。

但是,在VB的工程选项中将这些屏蔽了。

而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。

不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:Sub MainIf MsgBox("哈哈", vbOKCancel) = vbOK ThenShell "link2.exe " & Command$End IfEnd Sub然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkTemp.EXE改名为Link.EXE。

这样在VB调用Link.EXE时会弹出对话框,处理就会中断。

这时就可以有机会将OBJ文件拷贝出来了。

然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd:Public Function mathadd(ByVal a As Long, ByVal b As Long) As Longmathadd = a + bEnd Function编译这个工程,在Link的时候就会中断。

VBA封装为Dll的例子、方法与总结

VBA封装为Dll的例子、方法与总结

VBA封装为Dll的例子、方法与总结制作DLL时,ThisWorkBook中的代码封装方法如下:1、打开VB6,新建Act iveX DLL。

修改“工程”名称和“类模块”名称为需要的名称。

本例中,工程修改为Test DLL,类模块修改为Test。

2、建立引用。

一般需要引用Microsoft Office 11.0 Object Library和Microsoft Excel 11.0 Object Library。

如果VBA代码中还有其他引用,在VB中也要对他们引用。

3、这一步就是具体封装代码了。

在刚才建立好的Test DLL中,将代码放入Test类模块中。

如封装ThisWorkBook中的Open事件:Sub wbk_open(EApp As Excel.Applicat ion, wb As Excel.Workbook, sh As Excel.Worksheet)'--VBA中需要封装的主体代码End Sub其中VBA中的代码为事先做好的要封装的代码,如下面这个例子:'打开工作薄后在当前的工作表A1中输入TestPrivat e Sub workbook_open()Cells(1, 1) = "Test"End Sub封装为DLL的代码为:Sub wbk_open(EApp As Excel.Applicat ion, wb As Excel.Workbook, sh As Excel.Worksheet)Cells(1, 1) = "Test"End sub现在在VB6中生成Dll,到此就完成封装了。

4、在VBA中使用封装的代码首先,在VBA中要引用刚才生成的Test Dll.dll。

然后新建一个模块,在其中定义这样一个变量T:Public T As New Test Dll.Test然后在ThisWorkBook的Open中引用Test Dll中的Test,代码如下:Privat e Sub workbook_open()On Error Resume NextT.wbk_open Applicat ion, ThisWorkbook, Act iveSheetEnd Sub这样每次打开Excel后,就在Sheet1的Cells(1,1)中输入“Test”。

VB操作Excel封装成DLL

VB操作Excel封装成DLL

VB操作Excel封装成DLL【前言】:网上由于封装的例子和教程太零散,故系统地揭开封装神秘的面纱。

【步骤】:1、启动VB6.0程序,新建“ActiveX DLL”。

2、勾选VB对Excel的引用:(1) Microsoft Excel x.0 Object Library ;(2) Microsoft Office x.0 Object Library 。

3、在VB中编写需封装的功能代码。

(1)将工程名“工程1”改为“符合功能的名字”——如“海纳百川测试”,将类模块名“Class1”也改为另一个“符合功能的名字”——如“删除重复项”。

(说明:符合命名规则任意改为某某名,改名主要是为了区别和方便调用)(2)编写功能代码。

Sub 删重()Dim dic As ObjectDim xlApp As Excel.Application '针对GetObject获取已打开的Excel对象'Dim xlApp As New Excel.Application '针对CreateObject创建新的Excel对象Dim exWb As Excel.WorkbookDim exSh As Excel.WorksheetDim r As LongSet xlApp = GetObject(,"excel.application") '获取已打开的Excel对象'Set xlApp = CreateObject("excel.application") '创建新的Excel对象Set exWb = xlApp.ActiveWorkbook '获取当前活动工作簿'Set exWb = xlApp.Workbooks.Add '创建新的工作簿Set exSh = exWb.ActiveSheet '获取当前活动工作表'Set exSh = exWb.WorkSheets(1) '设置第一个工作表Set dic = CreateObject("scripting.dictionary")Dor = r + 1dic(exSh.Cells(r, 1).Value) = ""Loop Until exSh.Cells(r, 1) = ""exSh.Cells(1, 3).Resize(dic.Count) =Application.Transpose(dic.keys)Set dic = NothingSet xlApp=NothingSet exWb=NothingSet exSh=NothingEnd Sub4、点击——“文件”——“生成海纳百川测试.dll”——保存到指定位置。

将VBA代码编译封装成为DLL动态链接库方法

将VBA代码编译封装成为DLL动态链接库方法

将VBA代码编译封装成为DLL动态链接库方法在OFFICE中使用VBA虽然方便,并且功能强大,但是VBA在代码的保护上却存在着缺陷。

如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。

而且即使设置了密码保护,也很容易被人破解。

因此,要想真正保护VBA代码,要想让别人无法或难于破解您的VBA代码,那么,我们可以将VBA代码编译成为DLL动态链接库,也就是封装成为DLL的意思,下面是与此相关的方法,希望对您有所帮助。

一、为什么要编译成为DLL我们知道,Visual C++、Visual Basic和C++ Builder以及Delphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。

那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。

而且这样做还有一个好处,即可以加快代码的运行速度。

二、将VBA代码封装成动态链接库假如我们已经写好了一个VBA工程,而且运行无误。

①建立VB工程及一般性操作首先,我们需要两种工具,其中当然包括Microsoft Word,另外一种是Microsoft Basic 6.0。

打开Microsoft Basic 6.0,在“新建工程”中选取“ActiveX DLL”,新建一个工程。

在属性窗口中将工程名改为VBAPrj,类模块名改为VBACls。

然后在“工程”菜单下打开“引用”,选取“Microsoft Office 11.0 Object Library”——这一步很是关键,切不可遗漏,然后保存工程。

下面我们所做的是向工程内添加代码。

将VBA工程中的一个名为Test过程的代码选定后复制,然后切换到VB编辑器,选中VB的工程管理器中的类模块VBACls,将代码粘贴至代码编辑窗口中,于是这段代码便成了类模块VBACls一个方法,然后将工程编译生成dll文件(如果编译成功的话)。

在Word中,我们就可以通过类模块VBACls建立的对象来调用此方法(具体怎么调用,我们将后面介绍)。

vb和vc混合编程实例(ocx和dll)

vb和vc混合编程实例(ocx和dll)

vb和vc混合编程实例(ocx和dll)(转载)前⾔:由于以前⽤vb和vc++封装过dll和ocx⽂件. 或者在⽹上下的类;若重新编写和封装会很费时和费⼒. 如vb简单易⽤,对数据库操作通⽤类进⾏封装.现在vc中可以引⽤之。

另外由于vc执⾏效率⾼,某些较复杂算法或低层处理可在vc中进⾏封装. 这样经常要求混⽤.下⾯是实际中个例⼦记,分vb6.0,vc++各⾃创建和调⽤四个部分1: vb能封装ocx和active dll⽂件. 注意 active dll是⼀种动态,在被调⽤环境中不仅引⽤这个dll,⽽且还要引⽤这个dll所引⽤的其它⽂件,如 DBCommom.dll 是个数据库操作类封装,它引⽤了Ado 接⼝).其创建略,具体引⽤见后.2.vc中做dll时注意要提供接⼝,供其它程式调⽤.a>创建 win32 Dynamic-Link Library 如项⽬CMyTestDllb>加⼊成员function(在 .h中申明 .cpp中实现)//取电脑名称int CMyTestDll::GetComputerNameE(LPTSTR computer_name){DWORD buf=255;LPTSTR strname=new char[buf];if(GetComputerName(strname,&buf)!=0){strcpy(computer_name,strname);return 1;}return 0;}//计算两个值之和int CMyTestDll::Sum(int a, int b){return(a+b);}c.>⼀定要加上CMyTestDll.def ⽂件,并在在其中定义导出各个function及参数,否则不能被调⽤EXPORTSGetComputerNameE @1;Sum @2; @3;d.>编译成dll便可以.最好每个function定义int为返回值.3.vb引⽤vc中dll 和普通API函数⼀样.(vb的long对应 vc的int)'引⽤Private Declare Function GetComputerNameE Lib "⽬录\MyTestDll.dll" (ByVal strName As String) As LongPrivate Declare Function Sum Lib "⽬录\\MyTestDll.dll" (ByVal g As Long, ByVal b As Long) As Long'调⽤Dim str As String * 20 ' 注意对于传址,⼀定要定义其空间⼤⼩(数组可以不指定)dim a As Long, b As Longa=25 b=78result = GetComputerNameE(str)result=Sum(a, b)4.vc引⽤vb中ocx和dll如 C:\TestVb\DBCommon.dll 是个vb做的数据库通⽤类。

VB调用C#封装dll文件

VB调用C#封装dll文件

第一步C# 封装dll文件1、创建TestVotedll工程,设置工程属性如下图2、编写程序using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;//提供各种各样支持 COM 互操作及平台调用服务的成员namespace TestVoteDll{//定义接口public interface ITestClass{void SetCom(string comid);//bool InitVote(string [,] voteinfo);string[,] GetVoteResult();}[ClassInterface(ClassInterfaceType.None)]//必须增加的一句话。

public class VoteCom : ITestClass //通过接口继承父类ITestClass{public string[,] myvoteInfo;public int lng1 = 0;public int lng2 =0;public string ComID = "COM1";public void SetCom(string comid){}public Boolean InitVote(string[,] voteinfo){lng1 = voteinfo.GetLength(0);lng2 = voteinfo.GetLength(1);myvoteInfo = new string[lng1, lng2];for (int k = 0; k < lng1; k++){for (int m = 0; m < lng2; m++){myvoteInfo[k, m] = voteinfo[k, m];}}return true;}public string [,] GetVoteResult(){int k = 1;for (int m = 0; m < lng2; m++){myvoteInfo[k, m] =System.Environment.TickCount.ToString();}return myvoteInfo;}}}编译生成时,查看Debug目录下有两个文件TestV oteDll.dll和TestV oteDll.tlb 3、建立VB工程引用TestVoteDll.tlb此文件,编写测试程序Dim a As ObjectSet a = CreateObject("TestV oteDll.Class1")Dim c() As StringReDim c(1, 1) As Stringc(0, 0) = 1c(0, 1) = 2c(1, 0) = ""c(1, 1) = ""Dim Res As BooleanRes = a.InitVote(c) //传入数组Call a.SetCom("COM2") 可以传入字符串Dim b() As Stringb = a.GetVoteResult() //获取dll文件的数组。

VB封装DLL实例讲解(三)

VB封装DLL实例讲解(三)

VB封装DLL实例讲解(三)一、手动注册及引用(一)手动注册及引用方法(参看实例:手动引用.mdb)进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的手动注册及引用。

4点确定按钮1点浏览按钮2点选DLL3点打开按钮(二)手动注册及引用方法不足及问题手动注册引用优点是不言而喻的,方便简捷,易于操作。

但在实际运用中,当我们在其他电脑上发布应用程序,或运行我们测试好的应用程序时,却会出现错误提示,程序无法正常运行。

错误(一):找不到工程或库(见下图)错误的主要原因:DLL在当前运行的电脑系统中没有注册信息,而且引用不正确。

错误(二):引用的动态链接库(DLL)丢失(见下图)进入到VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,我们会看到之前引用的DLL动态链接库丢失。

错误的主要原因:系统无法找到原路径引用DLL。

错误(三):自动化错误(见下图)错误的主要原因:我们在发布应用程序的电脑或系统中,虽然重新完成DLL手动注册和引用,但如果DLL路径再次改变,运行程序时就会出现“自动化错误”提示。

错误(四):ActiveX部件不能创建对象(见下图)错误的主要原因:应用程序已正常引用DLL动态链接库,但其册注信息丢失或者没有正常注册,就会出现以下问题。

(三)解决上述错误方法1、解决错误方法,当然是重新进行DLL的手动注册及引用,具体步骤参下图。

但这只是治标不治本的办法,不利于对外发布我们的应用程序,最好的办法还是通过VBA自动完成DLL的注册及引用。

1去除丢失DLL钩选5点确定按钮2点浏览按钮3点选DLL4点打开按钮我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。

但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BAT文件,让打包发布时将该BAT文件一并打包发布,安装时运行该BAT文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BAT文件实例。

如何用VB编写自己的DLL文件,并调用其中的函数

如何用VB编写自己的DLL文件,并调用其中的函数

如何用VB编写自己的DLL文件,并调用其中的函数一、VB编写自己的DLL文件1.新建一个VB工程,工程类型为ActiveX DLL类型。

2.设定工程的名字和类模块的名字。

这里我使用的工程的名字是DLLTest,类模块的名字是Class1。

3.在类模块中写入要封装的函数这里我写了一个计算长方体的体积的函数,代码如下:1.Function calVolume(ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double2.calVolume = a * b * c3.End Function4.保存工程,并生成Dll文件。

通过选择”文件“->”生成DllT est.dll“,生成Dll文件。

至此,完成Dll文件的制作。

二、如何调用自己制作的Dll文件中的函数1.新建一个VB工程,工程类型为标准EXE类型。

2.注册制作的Dll文件。

注册命令格式为:regsvr32 dll文件的绝对地址名称举例说明:比如我把上面我生成的DllTest.dll放在了E盘的VbTest文件里面了,那么我的注册命令为:regsvr32 E:\VbTest\DllTest.dll。

如果注册成功,系统会有弹窗提示。

(测试发现,注册dll文件时,路径文件夹的名字不能有空格)3.在工程中添加相关引用。

”工程“->”引用“->”DllTest“,在DllTest前面打上对勾,即可。

4.编写调用Dll文件的相关代码。

这里我在主窗体中添加了一个按钮,在按钮里面写入了如下代码:Private Sub Command1_Click()Dim MyObj As DllT est.Class1 Set MyObj = New Class1Dim aa As DoubleDim bb As DoubleDi m cc As DoubleDim tempVolume As Doubleaa = 1.1bb = 2.2cc = 3.3tempVolume = MyObj.calVolume(aa, bb, cc)MsgBox temp VolumeEnd Sub另外,我添加了一个模块,在模块中写入了如下代码:Public Declare Function calVolume Lib 'DllTest.dll' (ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double5.至此结束。

VBA封装为DLL及调用

VBA封装为DLL及调用

V B A封装为D L L及调用使用程序:1、MicrosoftOfficeExcel20032、MicrosoftVisualBasic6.0案例:在工作表的C1单元格得出A1单元格+B1单元格的值。

设计的VBA代码:SubTest()OnErrorResumeNextRange("C1")=Cells(1,1)+Cells(1,2)EndSub第一部分、使用VB6.0制作DLL文件一、启动VB6.0,新建一个ActiveXDLL工程:二、引用:在VB中对Excel的引用不同版本的EXCEL在“引用”窗口里显示的版本号也不同:EXCEL2000(MicrosoftOffice9.0)EXCEL2002(MicrosoftOffice10.0),即ExcelXPEXCEL2003(MicrosoftOffice11.0)EXCEL2007(MicrosoftOffice12.0)EXCEL2010(MicrosoftOffice14.0)EXCEL2013(MicrosoftOffice15.0)三、修改ActiveXDLL的工程名称和类模块名称四、编写代码:在代码窗口输入代码,过程名称为Test:SubTest()OnErrorResumeNextDimVBt,YB'定义变量VBtSetVBt=GetObject(,"Excel.Application")'使VBt表示为EXCEL对象SetYB=VBt.ActiveSheet'使YB表示为EXCEL的当前工作表'注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象YB.Range("C1")=YB.Cells(1,1).Value+YB.Cells(1,2).ValueEndSub五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):六、保存工程、测试、生成DLL文件:1、保存工程:保存本工程以作为将来修改代码和升级程序的需要;2、测试工程:执行快捷工具栏上的“启动”按钮,检查是否存在错误;3、生成DLL文件:制作DLL文件。

使用VB将CAD中使用VBA编写的DVB文件封装成DLL

使用VB将CAD中使用VBA编写的DVB文件封装成DLL

使用VB将CAD中使用VBA编写的DVB文件封装成DLL (2008-07-16 15:09:24)转载▼标签:it分类:工作/开发方面目的:使用VB将CAD中使用VBA编写的DVB文件封装成DLL,保护自己的核心代码步骤:1、在VB中创建ActiveX DLL,并引用“AutoCAD 库(AutoCAD 2006 Type Library)”2、将DVB中的代码(需要保护的)拷贝到VB代码区中,并将所有ThisDrawing全部替换为acadDoc3、在VB代码区输入如下代码:Dim acadApp As ObjectDim acadDoc As ObjectPublic Sub ChangeColor()Set acadApp = GetObject(, "AutoCAD.Application")Set acadDoc = acadApp.ActiveDocumentacadApp.WindowState = acMaxCall PinkTxtLwP 'PinkTxtLwp就是DVB中的过程(函数)End Sub4、在VB中,文件——生成**.dll文件5、返回VBA界面,引用刚才生成的DLL文件6、在VBA代码区中输入如下代码'ChangeColor为VB中新创建ActiveX Dll文件后类的名称'默认为Class1Dim ChgCor As New ChangeColorPublic Sub TestChangeColor_Dll()ChgCor.ChangeColorEnd Sub7、OK,运行TestChangeColor_Dll即可,这样就保护了自己的核心代码。

使用VB将ASP代码封装生成DLL文件

使用VB将ASP代码封装生成DLL文件

使用VB将ASP代码封装生成DLL文件一、引言Server端的脚本运行环境,它简单易用,不需要编译和连接,脚本可以在Server端直接运行,并且它支持多用户、多线程,在 Web开发中得到了广泛的应用。

服务器端的组件有别于客户端的组件。

客户端的组件是通过网络传输,依靠HTML来起作用,而且只能在IE上有用。

但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作。

因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器。

但是,因为 ASP脚本是纯文本格式,所以恶意者通过源代码可以很容易地看到原本不该看到的页面内容。

因此,保护ASP源代码显得非常重要。

将ASP代码封装成DLL,不仅加快了ASP代码的执行速度,而且也能保护原代码。

当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到标签之间的代码,并且执行它(也可以是之间的代码)。

如果这个ASP程序在先前被调用过,那么它就会用内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译。

这样就大大节省了服务器的资源。

二、实现方法启动你的VB,选择ActiveX图标。

这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名(class1)。

在动手之前请首先确认我们拥有Microsoft ActiveX Data Object 2.0 Library,它在我们的程序非常有用。

从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗口,从中选择Microsoft ActiveX Data Object 2.0 Library。

现在我们有了我们自己的工程(project1)和类名(class1)。

以后我们就会在ASP代码中使用它们的名字来引用这个组件。

在ASP中我们就这样引用,如下: Set ObjReference = Server.CreateObject("ProjectName.ClassName")为了在类中使用ASP的方法,你必须在此类中写上初始和终止这两个函数。

Visual Studio DLL的封装和调用教程

Visual Studio DLL的封装和调用教程

Visual Studio DLL的封装和调用教程1.新建一个C#类库项目。

2.输入自己想要的代码。

(本教程以一个物理公式为例。

)using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Grade8Physics{public static class Class1{public static double speedv(double s, double t){if (t > 0){return s / t;}else{return 0;}}}}3.生成解决方案。

4.打开生成目录,复制DLL。

5.粘贴到要调用它的项目目录中。

6.打开这个项目。

7.添加引用,引用刚才的DLL。

8.打开对象浏览器,就能看到刚才DLL中的对象,它可以在任何编程语言之间通用,所以你编写时可以根据自己的爱好选择与此示例不同的编程语言。

8.在代码中调用,实现其功能。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Label4.Text = Grade8Physics.Class1.speedv(Val(TextBox1.Text), Val(TextBox2.Text)) End Sub9.运行结果。

精!VB封装Excel_VBA成DLL所有技巧

精!VB封装Excel_VBA成DLL所有技巧

VB封装Excel_VBA成DLL技巧2010-08-20 10:24:41| 分类:IT |字号订阅宏通VBA软件工作室:VB封装Excel_VBA成DLL技巧使用VB6.0在WinXP_sp2、Excel 2000环境下制作、测试通过。

一、启动VB6.0:执行:“文件夹(F)”——“新建(N)”——选择“ActiveX DLL”,如下图1:二、引用:VB中对Excel的引用执行:“工程(P)”——“引用(N)”——选择所要引用的项目:如下图2Excel 2000中:Microsoft Excel 9.0 Object LibraryMicrosoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object LibraryMicrosoft Office 11.0 Object Library三、编写代码:1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”,改为“zyg365”,2、在类模块的代码编辑区写入代码:如下图3模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名Dim XLAPP As ObjectSet XLAPP = GetObject(, "Excel.Application")代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”(或按照 Sub hongtong() 中的格式编写。

)Sub hongtong()Dim excelApp As New Excel.ApplicationDim excelWorkBook As Excel.WorkbookDim excelWorksheet As Excel.WorksheetSet excelWorkBook = excelApp.Workbooks.Add '创建新工作簿Set excelWorksheet = excelWorkBook.Sheets(1)excelWorksheet.Cells(2, 3) = "宏通" '写入数据excelWorksheet.Cells(3, 4) = "zyg365" '写入数据excelApp.Visible = True '显示excel界面,用于调试excelWorkBook.PrintPreview '打印预览excelWorkBook.PrintOut '打印输出excelWorkBook.Saved = True'excelWorkBook.Close '关闭工作薄'excelApp.Quit '退出excelEnd Sub四、工程属性设置:(可以不设置,本步骤可以省略)为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成Dll文件:1、保存:单击保存,保存到一个文件夹中;2、测试:执行工具栏上的“启动”(右向的三角图标)按钮,检查是否存在错误;3、打包生成Dll文件:执行:“文件(F)”——“生成工程1.dll(K)”(当前工程中为:“zygtest.dll”),重命名为“zyg.dll”,至此,Dll文件制作结束。

VB封装DLL实例讲解(二)

VB封装DLL实例讲解(二)

VB 封装DLL 实例讲解(二)上文中我们已经就DLL 的基本概念,以及如何将VBA 代码封装为DLL ,如何引用该生成的DLL 动态链接库,进行了初步的讲解,我想大家对于VB 封装DLL 应该有了一个初步的了解。

下面主要就DLL 如何实现对ACCESS 对象进行封装方法进行探讨。

一、如何在VB 中实现对ACCESS 对象编程(一)在VB 中引用ACCESS 对象类库我们要通过编译DLL 来实现对ACCESS 对象的封装,首先必须在VB 中引用ACCESS 对象类库,这样我们就可以在VB 中,实现对ACCESS 应用程序中的对象进行编程。

打开VB 编辑窗口,点菜单【工程】-【引用】,打开【引用对话框】,点选“Microsoft Access 11.0 Object Library ”完成对当前版本ACCESS 应用程序对象的引用。

(实例演示版本为ACCESS 2003)对ACCESS 对象库的引用很关键,否则我们无法实现对ACCESS 对象的编程(二)了解ACCESS 对象模型在VB 中要对ACCESS 对象进行编程,还必需对ACCESS 所提供的各项对象有一定了解,因为VB 就是通过ACCESS 对象的方法与属性,来完成各项操作与设置,下图为ACCESS 2003 的对象部分模型图例。

上图为ACCESS 2003对象模型,因为篇幅的问题,文中只显示模型中部分对象,要了解全部对象模型,请大家参阅帮助。

(三)VB编程中ACCESS VBA与VB对象表述区别1、ACCESS VBA与VB的顶层对象都为Application,但在编程中ACCESS VBA顶层对象表述为:Application,而在VB编程中顶层对象用简写:App表述(到又改回了Application)。

✍例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例:'在VB中获得当前路径:App.Path'在VB中获得ACCESS的当前路径:Application.CurrentProject.Path在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application 来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS 应用程序对象,并不会产生冲突的问题。

怎样在VBnet平台使用反射技术把引用的dll文件封装至资源文件并成功调用

怎样在VBnet平台使用反射技术把引用的dll文件封装至资源文件并成功调用


Try

Dim assembly As Assembly = Assembly.Load(My.Resources.Controlset)

Dim type As Type() = assembly.GetTypes()

For Each t As Type In type

If t.[Namespace] = [nameSpace] AndAlso = className Then
那么怎样才能把这种借用的dll文件做到自己的exe程序之中,成为自己程序 的一部分,即单文档的exe呢?
且看,我是怎么把这个dll做到exe中去 的。
1,我采用的编程工具是,集成在visual studio2017版的,目前最新 版的。
2,可能很多人用C#,作为编程语言,看我的这个教程会有点累,但是,没 关系,我告诉你,C#和都是微软的亲儿子,他们是差不多的,网上 有专门翻译或转换代码的网站。

End If

Next

End If

Next

Catch e As Exception

MessageBox.Show(e.Message)

End Try

Return Nothing

End Function

Public Sub diaoyong从资源中调用QQ截图()

'这些名称空间和类要预先知道,用for each循环可以获取到。

InvokeMethod("Sywenelan.Controls", "TDCuttingPlan", "ShowDialog", {}) 'ShowDialog不需要参数,就用一个空集合{}表示。

(完整版)VB调用动态链接库(DLL)

(完整版)VB调用动态链接库(DLL)

VB调用动态链接库(DLL)作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广大编程人员的欢迎。

它使程序员不必再直接面对纷繁复杂的Windows消息,而可以将精力主要集中在程序功能的实现上,大大提高了编程效率。

但凡事有利必有弊。

VB中高度的封装和模块化减轻了编程者的负担,同时也使开发人员失去了许多访问低层API函数和直接与Windows交互的机会.因此,相比而言,VB应用程序的执行效率和功能比C/C++或Delphi生成的程序要差。

为了解决这个问题,在一个大型的VB开发应用中,直接调用Windows API函数几乎是不可避免的;同时,还有可能需要程序员自己用C/C++等开发一些动态连接库,用于在VB中调用。

本文主要讨论在32位开发环境Visual Basic 5。

0中直接调用Windows 95 API函数或用户生成的32位动态连接库的方法与规则。

Windows动态连接库是包含数据和函数的模块,可以被其它可执行文件(EXE、DLL、OCX 等)调用。

动态连接库包含两种函数:输出(exported)函数和内部(internal)函数.输出函数可以被其它模块调用,而内部函数则只能在动态连接库内部使用。

尽管动态连接库也能输出数据,但实际上它的数据通常是只在内部使用的。

使用动态连接库的优点是显而易见的.将应用程序的一部分功能提取出来做成动态连接库,不但减小了主应用程序的大小,提高了程序运行效率,还使它更加易于升级.多个应用程序共享一个动态连接库还能有效地节省系统资源。

正因为如此,在Windows系统中,动态连接库得到了大量的使用。

一般来说,动态连接库都是以DLL为扩展名的文件,如Kernel32.dll、commdlg.dll等.但也有例外,如16位Windows的核心部件之一GDI。

exe 其实也是一个动态库。

编写动态连接库的工具很多,如VisualC++、BorlandC++、Delphi等,具体方法可以参见相关文档。

VB调用C#封装dll文件

VB调用C#封装dll文件

第一步C# 封装dll文件1、创建TestVotedll工程,设置工程属性如下图2、编写程序using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;//提供各种各样支持 COM 互操作及平台调用服务的成员namespace TestVoteDll{//定义接口public interface ITestClass{void SetCom(string comid);//bool InitVote(string [,] voteinfo);string[,] GetVoteResult();}[ClassInterface(ClassInterfaceType.None)]//必须增加的一句话。

public class VoteCom : ITestClass //通过接口继承父类ITestClass{public string[,] myvoteInfo;public int lng1 = 0;public int lng2 =0;public string ComID = "COM1";public void SetCom(string comid){}public Boolean InitVote(string[,] voteinfo){lng1 = voteinfo.GetLength(0);lng2 = voteinfo.GetLength(1);myvoteInfo = new string[lng1, lng2];for (int k = 0; k < lng1; k++){for (int m = 0; m < lng2; m++){myvoteInfo[k, m] = voteinfo[k, m];}}return true;}public string [,] GetVoteResult(){int k = 1;for (int m = 0; m < lng2; m++){myvoteInfo[k, m] =System.Environment.TickCount.ToString();}return myvoteInfo;}}}编译生成时,查看Debug目录下有两个文件TestV oteDll.dll和TestV oteDll.tlb 3、建立VB工程引用TestVoteDll.tlb此文件,编写测试程序Dim a As ObjectSet a = CreateObject("TestV oteDll.Class1")Dim c() As StringReDim c(1, 1) As Stringc(0, 0) = 1c(0, 1) = 2c(1, 0) = ""c(1, 1) = ""Dim Res As BooleanRes = a.InitVote(c) //传入数组Call a.SetCom("COM2") 可以传入字符串Dim b() As Stringb = a.GetVoteResult() //获取dll文件的数组。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB封装DLL实例讲解(三)
一、手动注册及引用
(一)手动注册及引用方法(参看实例:手动引用.mdb)
进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的手动注册及引用。

4点确定按钮
1点浏览按钮2点选DLL
3点打开按钮
(二)手动注册及引用方法不足及问题
手动注册引用优点是不言而喻的,方便简捷,易于操作。

但在实际运用中,当我们在其他电脑上发布应用程序,或运行我们测试好的应用程序时,却会出现错误提示,程序无法正常运行。

错误(一):找不到工程或库(见下图)
错误的主要原因:DLL在当前运行的电脑系统中没有注册信息,而且引用不正确。

错误(二):引用的动态链接库(DLL)丢失(见下图)
进入到VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,我们会看到之前引用的DLL动态链接库丢失。

错误的主要原因:系统无法找到原路径引用DLL。

错误(三):自动化错误(见下图)
错误的主要原因:我们在发布应用程序的电脑或系统中,虽然重新完成DLL手动注册和引用,但如果DLL路径再次改变,运行程序时就会出现“自动化错误”提示。

错误(四):ActiveX部件不能创建对象(见下图)
错误的主要原因:应用程序已正常引用DLL动态链接库,但其册注信息丢失或者没有正常注册,就会出现以下问题。

(三)解决上述错误方法
1、解决错误方法,当然是重新进行DLL的手动注册及引用,具体步骤参下图。

但这只是治标不治本的办法,不利于对外发布我们的应用程序,最好的办法还是通过VBA自动完成DLL的注册及引用。

1去除丢失DLL钩选
5点确定按钮
2点浏览按钮3点选DLL
4点打开按钮
我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。

但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BAT文件,让打包发布时将该BAT文件一并打包发布,安装时运行该BAT文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BAT文件实例。

(二)DLL自动引用方法
2.1 通过References对象的AddFromFile方法实现自动引用
Dim ref As Reference '申明引用类对象
On Error Resume Next '避免因重复引用造成的错误提示
'实例化引用对象,完成DLL的引用
Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll")
为了避免因重复引用出现的错误,我们可以如上代码中加入Error语句,我们还可以在应用程序退出时,通过对References对象的Remove方法释放DLL或反引用。

Dim ref As Reference '申明引用类对象
'实例化反引用对象
Set ref = References("ClsFindString")
'移除引用指定类库
References.Remove ref
说明:根据本人实践,我个人倾向于使用Error语句,因为如果应用程序非正常退出,引用对
象没有反引用成功,启动时就难免出现重复引用的错误问题。

2.2 通过DLL唯一标识号实现自动引用
Dim ref As Reference'申明引用类对象
On Error Resume Next '避免因重复引用造成的错误提示
'唯一标识号完成注册,需要DLL标识号,主版本号,次版本
Set ref = References.AddFromGuid("{C5E340E2-C557-4852-AE83-5A0578B6863B}", 1, 0)
DLL的标识号是编译生成时就确定了的,这个标识号就是DLL的终生制身份证号,我们可以通过这个唯一标识号来完成DLL自动引用。

但此种方法必须具备两个条件,一是DLL已经成功注册,二是我们知道了该DLL的标识号、主版本号、次版本号。

2.2.1获取DLL标识号、主版本号、次版本号方法
Dim ref As Reference '申明引用类对象
'实例化引用类库对象
Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll")
Debug.Print ref.GUID '获得DLL唯一标识号
Debug.Print ref.Major '获得主版本号
Debug.Print ref.Minor '获得次版本号。

相关文档
最新文档