当前位置:文档之家› java调用C#封装的dll方法

java调用C#封装的dll方法

java调用C#封装的dll方法
java调用C#封装的dll方法

MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明

MATLAB2014a生成C++代码,并用VC2010生成dll 供VBA或VB调用使用说明 一、过程概述 1、使用VC2010生成.dll文件,测试VC程序是否正常 2、使用VBA调用VC2010生成的.dll文件,测试.dll文件调用的VBA代码是否 正常,这里使用Excel VBA主要是为了以后输入输出数据更方便。 3、使用MATLAB编写脚本程序文件,使用MATLAB CODER功能编译成c++文件。 4、VC2010集成MATLAB生成的c++代码,并编译成.dll文件 5、使用步骤1,2验证MATLAB生成的代码 二、具体实施过程描述 1、使用VC2010生成.dll文件 1.1工程建立 首先打开VS 2010--> 新建工程 --> Win32 --> Win32项目 --> 输入工程名称(MakeDll),选择好保存工程的路径-->确定。 在弹出的“应用程序设置”--> "应用成程序型" --> 选择 "DLL(D)" --> 附加选项-> 选择"空项目(E)" ---->点击"完成"进入项目工作窗口

1.2开始创建DLL 第一步: 在头"解决方案资源管理器" --> 头文件 --> 右键 -->添加新建项 ---→选择"头文件(.h)" -->输入文件名称(max) --> 点击“添加(A)”,完成max.h文件的添加。

max.h头文件中的代码为: 1. #ifndef _MAX_H 2. #define _MAX_H_ 3. __declspec(dllexport) int __stdcall fmax(int a,int b); 4. #endif 代码说明: __declspec(dllexport) 的作用是指定导出该函数为DLL函数; __stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用; 备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。这里需要修改的是int数据类型,fmax(int a,int b)的函数名称和变量名称和变量的类型,或者直接从第二步的主程序中复制过来。 第二步: 在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项 -->选择"C++文件(.cpp)" -->输入文件名称(max) --> 添加(A) max.c源文件中的代码为:

VB封装VBA文件

VB中的类开发 对程序员和编程爱好者来说,VB中类的技术是学习中的一个难点,在大型软件的开发过程中,模块(Moudle)、控件(Active moudle)构成了系统化、高效化的软件工程,而类的技术是控件和链接库技术的基础,因此掌握类的理论和编程方法是非常有意义的。 (一)类的基本定义和应用概述; 类是包含了方法、属性、数据成员的高级代码模块,它既在模块的范畴之内,又是一个没有图形界面的Active ocx,程序员可以象使用控件一样使用它,但却不能看到它,值得注意的是,类是不能继承的。 类能够使我们高效的完成对某一个或者某几个特定的对象的复杂操作,对象的动作就是类的方法,对象的属性就是类的属性过程。相对而言,如果编程的对象是一组事物,那么,我们采用标准模块的方式是非常合适的,在下列两种情况下,应该使用类进行代码处理: (1)创建大量性质相近的对象; (2)提高代码的封装性。 类的创建非常简单,在进行代码编写的时候,在“工程”菜单中选择“添加类模块”项目,就可以添加一个空白的类。 类文件一般以.cls作为扩展名保存。 (二)类的方法的实现; 类的方法类似于动态链接库的接口函数,它能够接受其他窗体代码的指定类型参数,并且传递到类中。一般来说类的方法是能够指定是否有返回值的。它在类中通常是一个public过程。请看下面的代码示例,它使一个密码框拒绝非字母的输入: (1)类cls的代码; Option Explicit'变量检查 Private WithEvents mytxt As TextBox '本类中的方法接受和控制一个text密码框 Dim isNUM As Boolean '类的模块级变量 Public Sub Attach(itTEXT As TextBox) '接受外部变量到mytxt中 Set mytxt = itTEXT End Sub Private Sub mytxt_KeyUp(KeyCode As Integer, Shift As Integer) isNUM = (KeyCode > = 65) And (KeyCode < = 90) '测试密码框的键盘输入是否是英文字母

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)”——选择所要引用的项目:如下图2 Excel 2000中: Microsoft Excel 9.0 Object Library Microsoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object Library Microsoft Office 11.0 Object Library三、编写代码: 1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”, 改为“zyg365”, 2、在类模块的代码编辑区写入代码:如下图3 模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名 Dim XLAPP As Object Set XLAPP = GetObject(, "Excel.Application") 代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”

(或按照Sub hongtong() 中的格式编写。)Sub hongtong() Dim excelApp As New Excel.Application Dim excelWorkBook As Excel.Workbook Dim excelWorksheet As Excel.Worksheet Set 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 '退出excel End Sub四、工程属性设置:(可以不设置,本步骤可以省略) 为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4 执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成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 Main If MsgBox("哈哈", vbOKCancel) = vbOK Then Shell "link2.exe " & Command$ End If End 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 Long mathadd = a + b End Function 编译这个工程,在Link的时候就会中断。然后把创建的Class1.obj、Module1.obj、Project1.obj备份出来。然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是: Link2.exe "e:\vbdll\Class1.obj" "e:\vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS 注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要: Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long

类封装成dll

如果你的工作长期与某个领域相关,比如说长期做直接体绘制 (DVR)方面的开发,那么你可能经常使用自己的传递函数类,如果每一个工程你都把传递函数类的.h和.cpp文件添加进去会比较麻烦,其实,我们可以像 使用opengl的库那样来用你自己的类,做法就是把你写好的类封装成dll,具体做法如下: 第一步:制作dll 利用VC6新建工程时选择win32 dynamic-Link Library(空的工程),然后添加头文件和cpp文件。假设你要封装的类的名成是TransferFunction,添加头文件 TransferFunction.h和TransferFunction.cpp到工程中。并将TransferFunction.h修改成: class __declspec(dllexport) TransferFunction { ... } 从而说明以后从dll要被导出的类是哪一个。这样编译完就会产生TransferFunction.dll和TransferFunction.lib两个文件。 第二步:如何使用这个dll 当已经生成dll后,有两种方法可以在其它程序中调用dll中的类和成员函数: 方法一: 1)把TransferFunction.dll和TransferFunction.lib复制到调用程序的执行路径下,注意不是debug路径下。 2)在project->setting->link里添加TransferFunction.lib(或者用 #pragma comment(lib, "TransferFunction.lib") ) 3)把TransferFunction.h中的__declspec(dllexport)改成 __declspec(dllimport) 然后复制到调用程序的执行路径下。 4)最后在主程序中就可以通过包含TransferFunction.h来使用TransferFunction类和它的成员函数。 方法二(推荐): 在方法一中,你每次建立一个工程都需要把 TransferFunction.dll,TransferFunction.lib,TransferFunction.h三个文件拷贝到工程里面 去,事实上这只发挥了dll对类的代码保护的功能,并没有多大的减轻编程人员的工作量,下面的方法可以减少编程人员的工作量,具体步骤:

VB封装DLL实例讲解(三)

4 1 2点选DLL 3点打开按钮

5 2 3点选DLL 4点打开按钮

我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BA T文件,让打包发布时将该BA T文件一并打包发布,安装时运行该BA T文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BA T文件实例。 (二)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 '获得次版本号

用VB编写.DLL动态链接库文件

用VB编写.DLL动态链接库文件 作者:不详 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 Main If MsgBox("哈哈", vbOKCancel) = vbOK Then Shell "link2.exe " & Command$ End If End 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 Long mathadd = a + b End Function 编译这个工程,在Link的时候就会中断。然后把创建的Class1.obj、Module1.obj、Project1.obj备份出来。 然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是: Link2.exe "e:\vbdll\Class1.obj" "e:\vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /EN TRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0 /Dll /INCREMEN TAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078 注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要: Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long 经过变通,VB可以做出输出函数的标准动态链接库——其实,国外早已经有人做出了在VB中制作标准DLL的Add-Ins了,使用非常方便,我也做过测试,证明确实可行。详情请看这里: https://www.doczj.com/doc/3c2965226.html,/vb/scripts/ShowCode.asp?txtCodeId=54190&lngWId=1

用VBA封装DLL

VBA封装为DLL及调用 2012-09-04 02:36:00| 分类:VB / VBA / EXCEL | 标签:|举报|字号大中小订阅 使用程序: 1、Microsoft Office Excel 2003 2、Microsoft Visual Basic 6.0 案例:在工作表的C1单元格得出A1单元格+B1单元格的值。 设计的VBA代码: Sub Test() On Error Resume Next Range("C1") = Cells(1, 1) + Cells(1, 2) End Sub 第一部分、使用VB6.0制作DLL文件 一、启动VB6.0,新建一个ActiveX DLL工程: 二、引用:在VB中对Excel的引用

不同版本的EXCEL在“引用”窗口里显示的版本号也不同:EXCEL2000(Microsoft Office 9.0) EXCEL2002(Microsoft Office 10.0),即ExcelXP EXCEL2003(Microsoft Office 11.0) EXCEL2007(Microsoft Office 12.0) EXCEL2010(Microsoft Office 14.0) EXCEL2013(Microsoft Office 15.0) 三、修改ActiveX DLL的工程名称和类模块名称

四、编写代码: 在代码窗口输入代码,过程名称为Test: Sub Test() On Error Resume Next Dim VBt, YB '定义变量VBt Set VBt = GetObject(, "Excel.Application") '使VBt表示为EXCEL对象 Set YB = VBt.ActiveSheet '使YB表示为EXCEL的当前工作表 '注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象 YB. Range("C1") = YB.Cells(1, 1).Value + YB.Cells(1, 2).Value End Sub 五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):

VBA封装为DLL及调用

V B A封装为D L L及调用 使用程序: 1、MicrosoftOfficeExcel2003 2、 案例:在工作表的C1单元格得出A1单元格+B1单元格的值。 设计的VBA代码: SubTest() OnErrorResumeNext Range("C1")=Cells(1,1)+Cells(1,2) EndSub 第一部分、使用制作DLL文件 一、启动,新建一个ActiveXDLL工程: 二、引用:在VB中对Excel的引用 不同版本的EXCEL在“引用”窗口里显示的版本号也不同: EXCEL2000() EXCEL2002(),即ExcelXP EXCEL2003() EXCEL2007() EXCEL2010() EXCEL2013() 三、修改ActiveXDLL的工程名称和类模块名称 四、编写代码: 在代码窗口输入代码,过程名称为Test:

SubTest() OnErrorResumeNext DimVBt,YB'定义变量VBt SetVBt=GetObject(,"")'使VBt表示为EXCEL对象 SetYB='使YB表示为EXCEL的当前工作表 '注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象 ("C1")=(1,1).Value+(1,2).Value EndSub 五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】): 六、保存工程、测试、生成DLL文件: 1、保存工程:保存本工程以作为将来修改代码和升级程序的需要; 2、测试工程:执行快捷工具栏上的“启动”按钮,检查是否存在错误; 3、生成DLL文件:制作DLL文件。 第二部分、调用DLL文件 一、在VBE中调用DLL文件 调用DLL文件,要分两步走:先注册DLL,再引用DLL。 1、注册DLL(使之放在可引用的列表上): 注册DLL也可以使用代码来做,但那样比较复杂,也存在很多问题,建议一般使用手工来注册。 (这里应该先设计好DLL文件放在硬盘的位置,因为后面引用DLL文件的代码也应该是指向这个位置的。)

Excel VBA编程 使用动态链接库

Excel VBA编程使用动态链接库 通过上面介绍的方法保护工程,非授权用户不能查看工程的源码。但是,仅仅设置密码保护是不够的,通过Internet可以搜索到多种方法对其进行破解。对源码安全性较高的保护方式是把VBA核心代码封装到动态链接库(DLL)文件中,然后用VBA代码访问动态链接库提供的过程或函数来完成工作。动态链接库很难被反编译,非常安全。 DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的或执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。 在VBE中,调用DLL文件时其运行速度是非常快的。用户可以通过Microsoft Basic 6.0将VBA 代码封装到动态链接库(DLL)文件中。 1.将VBA代码封装成动态链接库 打开Microsoft Basic 6.0,在【新建工程】中选取“ActiveX DLL”,新建一个工程。在【属性】窗口中将工程名改为VBAPrj,类模块名改为VBACls。然后执行【工程】|【引用】命令,在对话框中选取【Microsoft Office 11.0 Object Library】,然后保存工程。 将VBA工程中,将要封装的过程(如Test)的代码复制到VB的工程管理器中类模块VBACls 的【代码】编辑窗口中。这个过程成为类模块VBACls的一个方法,然后将工程编译生成DLL 文件。 提示可以将多个过程复制到VB的类模块中,从而使用DLL文件中包含多个方法。在Excel中,通过类模块VBACls建立的对象来调用这些方法。 2.修改代码 虽然VBA源于VB,但是两者毕竟存在着一些差异。因此,需要对转移到VB中的VBA代码做一些必要的修改。 ●修改VBA代码中所特有类型的对象。 如果所添加的代码里有VBA所特有类型——如WorkBook、WorkSheet、Rang等所建立的对象,编译时会提示错误,因为VB不能够识别这些对象。此时,可以将这些对象作为过程或函数的参数进行传递。需要注意的是,这些参数的类型都一律设为Object。 例如,过程Test中要访问对象Range,但是VB无法识别Range。于是,就为过程Test添加一个参数range来传递Range,即Test可定义为Test(range As Object)。 ●修改VBA所特有一般变量。 VB也无法识别VBA特有的一般变量,如ProtectType,同样,我们也将其作为过程后函数的参数进行传递,不过其类型名都一律设为Variant。 ●修改VBA所特有常量。 如果在VBA代码中出现了这样的语句: ProtectionType = msoLineSolid 很明显,msoLineSolid是Excel所独有的常量,不为VB所能识别,因而无法通过编译。当然,可以用修改变量的方法予以修改。在Excel中使用如下语句来获取该常量的值: MsgBox CStr (msoLineSolid) 其中CStr是类型转换函数,返回参数相应的字符串。只要在Excel中触发此事件,会弹出一个对话窗,显示“1”。于是,就可以将语句改为ProtectionType = 1。

MarlabSimulink(2014a)生成C++代码,并用VC2010生成dll供VBA或VB调用使用说明

MarlabSimulink(2014a)生成C++代码,并用VC2010生成dll供VBA或VB调用使用说明 一、过程概述 1、使用VC2010生成.dll文件,测试VC程序是否正常 2、使用VBA调用VC2010生成的.dll文件,测试.dll文件调用的VBA代码是否 正常,这里使用Excel VBA主要是为了以后输入输出数据更方便。 3、使用MatlabSimulink模型编译成c++文件。 4、VC2010集成MatlabSimulink生成的c++代码,验证在VC2010环境下能正常 运行。 5、VC2010将生成的程序编译成.dll文件,以便于VB调用 6、使用步骤1,2验证MatlabSimulink生成的代码 二、具体实施过程描述 1、使用VC2010生成.dll文件 1.1工程建立 首先打开VS 2010--> 新建工程 --> Win32 --> Win32项目 --> 输入工程名称(MakeDll),选择好保存工程的路径-->确定。 在弹出的“应用程序设置”--> "应用成程序型" --> 选择 "DLL(D)" --> 附加选项-> 选择"空项目(E)" ---->点击"完成"进入项目工作窗口

1.2开始创建DLL 第一步: 在头"解决方案资源管理器" --> 头文件 --> 右键 -->添加新建项 ---→选择"头文件(.h)" -->输入文件名称(max) --> 点击“添加(A)”,完成max.h文件的添加。

max.h头文件中的代码为: 1. #ifndef _MAX_H 2. #define _MAX_H_ 3. __declspec(dllexport) int __stdcall fmax(int a,int b); 4. #endif 代码说明: __declspec(dllexport) 的作用是指定导出该函数为DLL函数; __stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用; 备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。这里需要修改的是int数据类型,fmax(int a,int b)的函数名称和变量名称和变量的类型,或者直接从第二步的主程序中复制过来。 第二步: 在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项 -->选择"C++文件(.cpp)" -->输入文件名称(max) --> 添加(A) max.c源文件中的代码为:

VBA封装为DLL及调用

VBA 封装为DLL 及调用 使用程序: 1、M icrosoftOfficeExcel2003 2、M icrosoftVisualBasic6.0 案例:在工作表的C1单元格得出A1单元格+B1单元格的值设计的VBA代码:SubTest() On ErrorResumeNext Ran ge("C1")=Cells(1,1)+Cells(1,2) EndSub 第一部分、使用VB6.0制作DLL文件 一、启动VB6.0,新建一个ActiveXDLL工程: 二、引用:在VB中对Excel的引用 不同版本的EXCEI在“引用”窗口里显示的版本号也不同: EXCEL2000( MicrosoftOffice9.0) EXCEL2002( MicrosoftOffice10.0),即卩 ExcelXP EXCEL2003( MicrosoftOffice11.0) EXCEL2007( MicrosoftOffice12.0 ) EXCEL2010(MicrosoftOffice14.0 ) EXCEL2013( MicrosoftOffice15.0 ) 三、修改ActiveXDLL的工程名称和类模块名称 四、编写代码: 在代码窗口输入代码,过程名称为Test:

SubTest() OnErrorResumeNext DimVBt,YB' 定义变量VBt SetVBt二GetObject(,”Excel.Application")' 使VBt 表示为EXCEL寸象SetYB二VBt.ActiveSheet'使YB表示为EXCE啲当前工作表 '注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象 YB.Range("C1")=YB.Cells(1,1).Value+YB.Cells(1,2).Value EndSub 五、设置工程属性( 为使开发啲程序更规范,可以对工程属性加以描述【非必要设置,可以省略】) : 六、保存工程、测试、生成DLL 文件: 1、保存工程:保存本工程以作为将来修改代码和升级程序啲需要; 2、测试工程:执行快捷工具栏上啲“启动”按钮,检查是否存在错误; 3、生成DLL 文件:制作DLL 文件。第二部分、调用DLL 文件 一、在VBE中调用DLL文件 调用DLL文件,要分两步走:先注册DLL再引用DLLo 1、注册DLL (使之放在可引用的列表上): 注册DLL也可以使用代码来做,但那样比较复杂,也存在很多问题,建议一般使用手工来注册。 (这里应该先设计好DLL文件放在硬盘的位置,因为后面引用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 I strM = Me.Text1 '从第一个字符向最后一个字符循环,以提取每个字符 For I = 1 To Len(strM) '判断是否为0到9字符,是则赋值输出 If Mid(strM, I, 1) Like "[0-9]" Then strOut = strOut & Mid(strM, I, 1) End If Next I '用MsgBox函数进行输出测试

VB封装到 AUTOcad VBA

B 封裝EXCEL VBA dll 1. 安裝VB 精簡版 6.0 新建工程選擇activeX DLL, 輸入代碼 Option Explicit Sub TestDll(excelApp As Excel.Application) 'Dim excelApp As Object 'Set excelApp = GetOjbect(, "Excel.Application") Dim excelWorkBook As Excel.Workbook Dim excelWorkSheet As Excel.Worksheet Set excelWorkBook = excelApp.Workbooks(1) Set excelWorkSheet = excelWorkBook.Sheets(1) excelWorkSheet.Cells(1, 1) = "Good" excelApp.Visible = True MsgBox "Good Dll" 'excelWorkSheet.Cells(3, 3) = "Test Dll2" 'excelApp.Visible = ture 'excelWorkBook.PrintPreview 'excelWorkBook.Saved = True 'excelworkbook.close 'excelApp.Quit End Sub 設置引用

2. 點擊文件生成dll 并放E:\test.dll 或其他路徑 3.註冊/反註冊 DLL(目前測試來看,必須註冊否則會在VBA調用時提示ActiveX無法生成對象) 4.註冊成功后,VBA設定引用項目并編寫代碼 Option Explicit Sub test() Dim testdll As New VBACls ‘此處為實例化類而非VBAPRJ, 必須new 一個對象,否則報錯

如何封装VBA代码

封装我们的VBA代码 Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。 但是VBA在代码的保护上却存在着缺陷。如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。而且即使设置了密码保护,也很容易被人破解。笔者就曾用破解工具officekey 轻松地破解了他人设置的密码保护,不费吹灰之力便浏览了其中的代码,而且从中发现了文档保护密码。可见,要想保护自己的VBA代码,仅仅设置密码保护是不够的。 我们知道,Visual C++、Visual Basic和C++ Builder以及Delphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。而且这样做还有一个好处,即可以加快代码的运行速度。 将VBA代码封装成动态链接库 假如我们已经写好了一个VBA工程,而且运行无误。 1.建立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建立的对象来调用此方法(具体怎么调用,我们将后面介绍)。当然,我们可以继续向工程里添加代码。 2.修改代码 虽然VBA源于VB,但是两者毕竟存在着一些差异。因此,需要对转移到VB中的VBA代码做一些必要的修改。 (1)修改VBA代码中所特有类型的对象。 如果我们所添加的代码里有VBA所特有类型——如Document、Rang、BookMark等所建立的对象,编译时会提示错误,因为VB不能够识别这些对象。此时修改的方法是,将这些对象作为过程或函数的参数进行传递。需要注意的是,这些参数

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表述(到https://www.doczj.com/doc/3c2965226.html,又改回了Application)。 ?例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例: '在VB中获得当前路径: App.Path '在VB中获得ACCESS的当前路径: Application.CurrentProject.Path 在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application 来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS 应用程序对象,并不会产生冲突的问题。

封装我们的VBA代码

封装我们的VBA代码 作者:张业新来源:本站原创 Visual Basic for Applications(简称VBA)是新一代标准宏语言,是基于Visual Basic for Windows 发展而来的。VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,用户可以容易地将日常工作转换为VBA程序代码,使工作自动化。 但是VBA在代码的保护上却存在着缺陷。如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。而且即使设置了密码保护,也很容易被人破解。笔者就曾用破解工具officekey轻松地破解了他人设置的密码保护,不费吹灰之力便浏览了其中的代码,而且从中发现了文档保护密码。可见,要想保护自己的VBA代码,仅仅设置密码保护是不够的。 我们知道,Visual C++、Visual Basic和C++ Builder以及Delphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。而且这样做还有一个好处,即可以加快代码的运行速度。 一、将VBA代码封装成动态链接库 假如我们已经写好了一个VBA工程,而且运行无误。 1.建立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文件(如果编译成功的话)。在

相关主题
文本预览
相关文档 最新文档