VB封装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表述(到https://www.360docs.net/doc/9f13833164.html,又改回了Application)。

?例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例:

'在VB中获得当前路径:

App.Path

'在VB中获得ACCESS的当前路径:

Application.CurrentProject.Path

在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application 来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS 应用程序对象,并不会产生冲突的问题。

2、ACCESS VBA和VB中部分预定义类对象(如:窗体、控件等)表述基本相同,以“标签控件”为例,VB与ACCESS VBA均为Label,在VB编程中为了与ACCESS预定义类对象加以区别,ACCESS 标签对象通常用https://www.360docs.net/doc/9f13833164.html,bel表述。

?例程:在VB编程中定义VB及ACCESS标签控件对象实例:

'在VB中定义VB标签对象:

Dim m_Label As Label

'在VB中定义ACCESS标签对象:

Dim m_Label As https://www.360docs.net/doc/9f13833164.html,bel

在进行DLL编程时,特别需注意对象表述区别的问题,否则无法编译或是编译后在ACCESS 调用中报错。

(四)VB编程中关于ACCESS VBA专属常量

ACCESS VBA专属常量以“ac”开头,如:控件类(AcControlType)中的文本控件常量为acTextBox,这些常量不一定能被VB所识别,解决办法通常不使用“常量名”,而直接使用“常量值”,或以输入参数方式传递的方法来解决。

?例程:实现隐藏所有文本控件。acTextBox常量值为109。

Dim ctl As Access.Control '申明ACCESS控件对象

Dim frmClt As Access.Controls '申明ACCESS控件集合

'遍历所有ACCESS控件集合,如为文本控件,则不显示该控件

For Each ctl In frmClt.Controls

'文本控件类常量值为109,以常量值替代acTextBox常量名

If ctl.ControlType = 109 Then ctl.Visible = False

Next

你可以通过帮助查阅ACCESS专属常量值,也可以在ACCESS VBA中通过程序方式获取,如:在立即窗口输入:?acTextBox回车,就可以acTextBox常量值为:109。

二、DLL封装ACCESS对象实例演示

(一)ACCESS的MDB实例

MDB实例演示获得ACCESS版本信息,并在标签Label0中显示(见下图),具体参看实例中frmVer6窗体中的代码,及类模块ClsVeresion中代码。

mdb实例中frmVer1-frmVer6各窗体中具体演示了,代码按DLL封装需要整理的思路。

?例程:frmVer6窗体加载事件代码

Private Sub Form_Load()

'申明自定义类的实例

Dim m_Ver As New ClsVeresion

m_Ver.objAddItem Label0 '调用自定义类的objAddItem方法End Sub

?例程:ClsVeresion类模块代码

'程序功能:定义类接口,将版本信息输出并在标签中显示Public Sub objAddItem(m_label As Label)

m_label.Caption = AppVersion

End Sub

'函数功能:输出ACCESS版本信息

Private Function AppVersion() As String

Dim strVer As String '定义字符串变量

'将版本号赋值给字符串变量

strVer = Application.Version

'根据版号输出对应版本信息

Select Case strVer

Case "8.0"

AppVersion = "Access 97"

Case "9.0"

AppVersion = "Access 2000"

Case "10.0"

AppVersion = "Access 2002"

Case "11.0"

AppVersion = "Access 2003"

Case "12.0"

AppVersion = "Access 2007"

End Select

End Function

(二)DLL的封装ACCESS对象实现

1、打开VB6.0编辑器,点菜单【新建工程】,在【新建工程】对话框中,点选【ActiveX DLL】,点【确定】。

2、修改工程名及类名,实例中我定义的工程名:GetAccVer ,类名:ClsAccVer ,修改完成以后点选菜单【保存】工程(见下图)。

工程名就是我们后面将引用的DLL库名,类模块名为代码中我们申明的类名。

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

4、将MDB中类模块ClsVeresion代码复制到VB中ClsAccVer类模块中,按前面我们所述的VB中实现ACCESS对象编程的注意要点略做修改。(见下图划红线部分)

1、因为VB与ACCESS VBA 中标签类对象都为Label,因此加上库名(https://www.360docs.net/doc/9f13833164.html,bel)加以区别;

2、因为VB与ACCESS VBA顶层应用程序对象,表述原本就有区别,所以无需特别区分。

例程:ClsAccVer类模块代码

'程序功能:定义DLL接口,将版本信息输出并在标签实例中显示

Public Sub objAddItem(m_label As https://www.360docs.net/doc/9f13833164.html,bel)

m_label.Caption = AppVersion

End Sub

'函数功能:输出ACCESS版本信息

Private Function AppVersion() As String

Dim strVer As String '定义字符串变量

'将版本号赋值给字符串变量

strVer = Application.Version

'根据版号输出对应版本信息

Select Case strVer

Case "8.0"

AppVersion = "Access 97"

Case "9.0"

AppVersion = "Access 2000"

Case "10.0"

AppVersion = "Access 2002"

Case "11.0"

AppVersion = "Access 2003"

Case "12.0"

AppVersion = "Access 2007"

End Select

End Function

4、编译DLL,点菜单【文件】-【GetAccVer.dll】动态链接库,封装DLL就完成了。

你现在可以在ACCESS中引用该DLL测试一下看看成果了。参看实例中frmVer7窗体,如实例引用报错,请重新引用GetAccVer.dll即可。

因为本人认知及文字水平所限,不免有错漏之处,还请大家斧正。本文的Word文稿、VB源码、MDB 实例均在实例包中。在后文中我们主要就动态链接库引用的方法和技巧结合实例进行探讨。

江羽2010-05-30午

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封装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操作excel方法汇总

用VB操作excel方法汇总 Private Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application '声明对象变量 Me.MousePointer = 11 '改变鼠标样式 Set objExl = New Excel.Application '初始化对象变量 objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1 objExl.Workbooks.Add '增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name = "book1" '修改工作薄名称 objExl.Sheets.Add , objExl.Sheets("book1") '增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book2" objExl.Sheets.Add , objExl.Sheets("book2") '增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name = "book3" objExl.Sheets("book1").Select '选中工作薄 For i = 1 To 50 '循环写入数据 For j = 1 To 5 If i = 1 Then objExl.Selection.NumberFormatLocal = "@" '设置格式为文本 objExl.Cells(i, j) = " E " & i & j Else objExl.Cells(i, j) = i & j End If Next Next objExl.Rows("1:1").Select '选中第一行 objExl.Selection.Font.Bold = True '设为粗体 objExl.Selection.Font.Size = 24 '设置字体大小 objExl.Cells.EntireColumn.AutoFit '自动调整列宽 objExl.ActiveWindow.SplitRow = 1 '拆分第一行 objExl.ActiveWindow.SplitColumn = 0 '拆分列 objExl.ActiveWindow.FreezePanes = True '固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns = "" '打印标题 objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _ For mat(Now, "yyyy年mm月dd日 hh:MM:ss") objExl.ActiveWindow.View = xlPageBreakPreview '设置显示方式 objExl.ActiveWindow.Zoom = 100 '设置显示大小 '给工作表加密码 objExl.ActiveSheet.Protect "123", DrawingObjects:=True, _ Contents:=True, Scenarios:=True objExl.Application.IgnoreRemoteRequests = False

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) '测试密码框的键盘输入是否是英文字母

java调用C#封装的dll方法

Java调用C# DLL的方法简介 By 潘伟2012-8-7 关于java调用C# 封装的DLL文件的方法 第一种:java利用JNA进行调用 思路:C#源码生成COM组件(dll和tlb文件),再利用C++进行封装,java通过JNA调用C++封装的DLL。 第二种:java利用jacob进行调用 第一种java利用JNA调用C# DLL 需安装Visual Studio 2010 ,下载jna.jar(解压放置于jdk_home/jre/lib/ext目录下)。 第一步:利用C#写COM组件 1、新建一个类库项目(文件—新建—项目—类库;命名:COMTest);//根据实际需要取文件名 2、生成.cs主文件; COMTestClass.cs

3、右键点击工程->应用程序->程序集信息->使程序集com可见,打上勾

4、右键点击工程->生成->为com Interop注册打上勾 5、设置强签名 (由于.Net下编译的COM组件并等同于C编译的COM组件,所以存在必须在运行目标机器注册的情况,对此.Net下编译的COM组件必须为程序进行签名,即强命名密钥;) 打开Visual Studio Command Prompt 输入:sn -k MyKeyFire.snk 生成MyKeyFire.snk 文件,注意路径。(.snk文件可以随意取,但.snk后缀名别忘记了) 在签名标签中选中为程序集签名,选择刚刚生成的强名称文件MyKeyFire.snk 。

6、在“解决方案资源管理器”中找到节点“Properties”打开AssemblyInfo.cs文件 如下图 7、将[assem bly: Com Visible(false)]属性改成[assem bly: Com Visible(true)] 如下图 8、编译程序,\bin\Debug目录中会生成COMTest.dll 和COMTest.tlb文件。 第二步:利用C++进行再封装 1、创建C++ DLL项目,新建项目->VC++->Win32 项目(名称:COMTest_Bridge)->下一步->应用程 序类型:DLL 2、添加类,类名:COMTest_Bridge,.h名:COMTest_Bridge.h,.cpp名:COMTest_Bridge.cpp, 然后生成项目; 3、把第一步生成的COMTest.dll 和COMTest.tlb文件放入C++项目下的Debug文件夹下。 4、注册COM组件: 4.1打开Visual Studio Command Prompt进入Debug目录,运行命令注册:

使用NetBox简单实现ASP封装为EXE带图的详细教程

使用NetBox简单实现ASP封装为EXE带图的详细教程 NetBox是一个使用脚本语言进行应用软件开发与发布的开发环境和运行平台,使用 NetBox,可以完全使用脚本语言(比如 VBScript,Javascript) 创建出稳定高效的应用软件,并且可以平滑移植到从 Windows 98 到 Windows .NET Server 的全部操作系统上。适用范围对于 WEB 应用,可以迅速将已有的iis+asp 的应用平滑移植到NetBox应用中,除极少数高级编程外,代码不需要任何修改,同时NetBox还提供大量扩展部件,使得 WEB 应用更加方便。由于NetBox可以将全部代码最终发布成为应用程序,保护了开发人员的利益和代码的完整性。同时,NetBox还可以方便地编写更多的桌面应用、系统服务器应用、定制网络应用等等。 运行环境要求NetBox的基本运行环境要求很低,最低要求只需要 Windows 98 或者 Windows NT + IE4 即可运行。而如果需要使用系统其他部件(比如ado),则需要根据系统情况,如果系统本身未缺省安装,需要自行安装。下面列出的是经过测试的所有系统平台: Windows 98 Windows 98 SE Windows ME Windows NT+IE4 Windows 2000 Windows XP Windows .NET Server 以上为该软件的说明文件内的内容。 简单的形容就是把ASP文件打包成一个EXE文件,并且不需要在调试的机器上安装IIS即可正常调试。如果按照说明书来操作的话,观看比较繁琐,本人为方便大家使用,现制作一个简单的使用教程。 封装过程 1、首先安装NetBox,安装时全部是英文界面,默认安装。 2、准备步骤: 2.1、在任意(如D)盘根目录下建立web文件夹(在哪个盘符下建立都可以,根据自己的喜好变换位置。); 2.2、把需要封装的ASP文件拷贝至D盘web文件夹下的wwwroot文件夹内(是

VB编程在Excel中的应用

EXCEL 编程(VBA) Excel 最重要的应用就是利用公式进行计算。无论输入是纯粹的数字运算,还是引用其他单元格计算,只要在一个单元格中输入公式,就能得到结果。这个直接显示结果的设计对于绝大多数场合来说都是适用的,但某些情况下就不那么让人满意了。比如说在做工程施工的预结算编写,使用Excel,既要写出工程量的计算式,也要看到它的结果,于是这样相同的公式在Excel里面要填两次,一次在文本格式的单元格中输入公式,一次是在数据格式的单元格中输入公式让Excel计算结果。如何既能看到公式又能看到结果呢?这个问题笔者认为可以从两个方面考虑:一种方法是所谓“已知结果,显示公式”,先在数据格式单元格中输入公式让Excel计算结果,然后在相邻的单元格中看到公式;另一种方法所谓“已知公式,显示结果”,就是先在一个文本格式的单元格中输入公式,在相邻的单元格中看到结果。 ★ 已知结果,显示公式 假设C列为通过公式计算得到的结果(假设C1为“=A1+B1”,或者直接是数字运算“=2+3”),而相邻的D列是你需要显示公式的地方(即D1应该显示为“=A1+B1”或者“=2+3”)。 1. 打开“工具”菜单选择“选项”命令,出现“选项”对话框。 2. 在“常规”选项卡中,选中“R1C1引用方式”选项。 3. 定义名称,将“引用位置”由“=GET.CELL(6,Sheet1!RC[-1])”即可。这里的RC[-1]含义是如果在当前单元格的同行前一列单元格中有公式结果,则在当前单元格中得到公式内容,即在含公式结果单元格的同行后一列单元格显示公式内容;如果将RC[-1]改为RC[1],则在公式结果的同行前一列单元格显示公式内容。 4. 如果“引用位置”中含有“RC[-1]”,则在含公式结果单元格的同行后一列单元格中输入“=FormulaofResult”即可得到公式;如果“引用位置”中含有“RC[1]”,则在含公式结果单元格的同行前一列单元格中输入“=FormulaofResult”即可得到公式。 提示:如果想要在含公式结果单元格的同行后数第2列中显示公式内容,则需要把“引用位置”中的“RC -1 ”改为“RC -2 ”。 ★已知公式,显示结果 假设C列为输入的没有等号公式(假设C1为“A1+B1”),而相邻的D列是你需要存放公式计算结果的地方(即D1显示A1和B1单元格相加的结果)。 1. 选中D1,然后打开“插入”菜单选择“名称”命令中的“定义”子命令,出现“定义名称”对话框。 2. 在“在当前工作表中的名称”输入栏中输入定义的名称“ResultofFomula”,在下方的“引用位置”编辑栏中输入“=EVALUATE(Sheet1!C1)”,单击[确认]按钮退出。 3. 在 D1中输入“=ResultofFomula”,然后选中按住右下角的填充柄向下拉动填充即可。 提示:EVALUATE 是Eexcel 4.0版的宏表函数,Excel 2000和Excel 2002中 还支持,但只可用于名称定义中。 4. 填充后要按[F9]进行重算,如果C列的公式有改动,也需要及时按[F9]进行

c#数据库连接、操作、封装dll

c#数据库连接去sql server 为了简化数据库连接和操作,编写一个数据库dll文件也是比较有用的。只需要设置参数就可以完成数据库操作 属性 OUTPUTSTR 存储过程输出 CONSTR 数据库连接字符串 SQL_SLT 存储过程名或sql语句列表名 代码错误信息返回或连接关闭状态 public int sql_select(int cmdtype, int sqlst,int n) 数据库语句执行方法, cmdtype设置数据源执行的SQL语句或存储过程,即commandtype属性(0为text枚举,1为storedprocedure枚举,其他值为tabledirect枚举); sqlst设置执行SQL语句的方式,0为executenonquery方法执行,1为executereader 方法执行,其他为executescalar方法执行。设置存储过程参数个数。方法返回受 影响的行数 public Boolean Connopen() 打开数据库连接方法,返回bool值,true为打开,false 为未打开,并将未打开错误返回到EXSTR属性里 public void conn_close() 连接关闭方法,将关闭状态返回到EXSTR属性 public void sqlsp(string p1,string p2,string p3,int p4,int p5) 获取SqlParameter 对象参数,p1获取SqlParameter.ParameterName属性值,p2获取SqlParameter.sqldbtype属性值, p3获取SqlParameter.value属性值,p4获取SqlParameter.size属性值, p5设置SqlParameter.Directions属性值,0为ParameterDirection.Input、 1为ParameterDirection.InputOutput、2为ParameterDirection.Output、 大于3为ParameterDirection.ReturnValue public DataSet ds 返回查询结果集 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; using System.Collections; namespace connet { public class jdbccoonn { private string constr, exstr, sql_slt,outputstr; private static int q; public static int Q { get {

怎样实现用VB对EXCEL的操作

用VB操作excel方法 Private Sub Command3_Click() Dim i As Long Dim j As Long Dim objExl As Excel.Application'声明对象变量 Me.MousePointer=11'改变鼠标样式 Set objExl=New Excel.Application'初始化对象变量 objExl.SheetsInNewWorkbook=1'将新建的工作薄数量设为1 objExl.Workbooks.Add'增加一个工作薄 objExl.Sheets(objExl.Sheets.Count).Name="book1"'修改工作薄名称 objExl.Sheets.Add,objExl.Sheets("book1")'增加第二个工作薄在第一个之后 objExl.Sheets(objExl.Sheets.Count).Name="book2" objExl.Sheets.Add,objExl.Sheets("book2")'增加第三个工作薄在第二个之后 objExl.Sheets(objExl.Sheets.Count).Name="book3" objExl.Sheets("book1").Select'选中工作薄 For i=1To50'循环写入数据 For j=1To5 If i=1Then objExl.Selection.NumberFormatLocal="@"'设置格式为文本 objExl.Cells(i,j)="E"&i&j Else objExl.Cells(i,j)=i&j End If Next Next objExl.Rows("1:1").Select'选中第一行 objExl.Selection.Font.Bold=True'设为粗体 objExl.Selection.Font.Size=24'设置字体大小 objExl.Cells.EntireColumn.AutoFit'自动调整列宽 objExl.ActiveWindow.SplitRow=1'拆分第一行 objExl.ActiveWindow.SplitColumn=0'拆分列 objExl.ActiveWindow.FreezePanes=True'固定拆分 objExl.ActiveSheet.PageSetup.PrintTitleRows="$1:$1"'设置打印固定行 objExl.ActiveSheet.PageSetup.PrintTitleColumns=""'打印标题 objExl.ActiveSheet.PageSetup.RightFooter="打印时间:"&_ For mat(Now,"yyyy年mm月dd日hh:MM:ss") objExl.ActiveWindow.View=xlPageBreakPreview'设置显示方式 objExl.ActiveWindow.Zoom=100'设置显示大小 '给工作表加密码 objExl.ActiveSheet.Protect"123",DrawingObjects:=True,_ Contents:=True,Scenarios:=True objExl.Application.IgnoreRemoteRequests=False objExl.Visible=True'使EXCEL可见

类封装成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操作EXCEL(VB6.0)(整理)

用VB操作Excel(VB6.0)(整理)全面控制Excel: 首先创建Excel对象,使用ComObj: Dim ExcelID as Excel.Application Set ExcelID as new Excel.Application 1)显示当前窗口: ExcelID.Visible:=True; 2)更改Excel标题栏: ExcelID.Caption:='应用程序调用MicrosoftExcel'; 3)添加新工作簿: ExcelID.WorkBooks.Add; 4)打开已存在的工作簿: ExcelID.WorkBooks.Open('C:\Excel\Demo.xls'); 5)设置第2个工作表为活动工作表: ExcelID.WorkSheets[2].Activate; 或ExcelID.WorkSheets['Sheet2'].Activate; 6)给单元格赋值: ExcelID.Cells[1,4].Value:='第一行第四列'; 7)设置指定列的宽度(单位:字符个数),以第一列为例: ExcelID.ActiveSheet.Columns[1].ColumnsWidth:=5; 8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:ExcelID.ActiveSheet.Rows[2].RowHeight:=1/0.035;//1厘米 9)在第8行之前插入分页符: ExcelID.WorkSheets[1].Rows[8].PageBreak:=1; 10)在第8列之前删除分页符: ExcelID.ActiveSheet.Columns[4].PageBreak:=0; 11)指定边框线宽度: ExcelID.ActiveSheet.Range['B3:D4'].Borders[2].Weight:=3;

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

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 '获得次版本号

c,,中的模板及函数怎么封装为dll

竭诚为您提供优质文档/双击可除c,,中的模板及函数怎么封装为dll 篇一:封装dll 基于Visualc++6.0的dll编程实现 一、前言 自从微软推出16位的windows操作系统起,此后每种版本的windows操作系统都非常依赖于动态链接库(dll)中的函数和数据,实际上windows操作系统中几乎所有的内容都由dll以一种或另外一种形式代表着,例如显示的字体和图标存储在gdidll中、显示windows桌面和处理用户的输入所需要的代码被存储在一个userdll中、windows编程所需要的大量的api函数也被包含在kerneldll中。 在windows操作系统中使用dll有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个dll文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;使用dll的另一个优点是dll文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的dll文件就可以了,而且,当dll中的函数改变后,只要

不是参数的改变,程序代码并不需要重新编译。这在编程时 十分有用,大大提高了软件开发和维护的效率。 既然dll那么重要,所以搞清楚什么是dll、如何在windows操作系统中开发使用dll是程序开发人员不得不解 决的一个问题。本文针对这些问题,通过一个简单的例子,即在一个dll中实现比较最大、最小整数这两个简单函数,全面地解析了在Visualc++编译环境下编程实现dll的过程,文章中所用到的程序代码在windows98系统、Visualc++6.0编译环境下通过。 二、dll的概念 dll是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个dll(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的dll。dll库不同于静态库,在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.lib),Visualc++的编译器在处理程序代码时将从静态库 中恢复这些函数和数据并把他们和应用程序中的其他模块 组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。 在动态库的情况下,有两个文件,一个是引入库(.lib)文件,一个是dll文件,引入库文件包含被dll导出的函数

excel宏教程-VB汇总

Excel宏教程 一、选中单个单元格 Range(“<单元格地址>“).Select 例:Range("C9").Select …选中“C9”单元格 二、选中多个单元格 Range(“<单元格地址>:<单元格地址>[,<单元格地址>……]”).Select 例:Range(“A1:B2”).Select…选中“A1”、“A2”、“B1”、“B2”四个连续的单元格Range(“12:12”).Select…选中第12行 Range(“B:B”).Select…选中第B列 Range(“A1:A2,B7,2:2”).Select…选中“A1”、“A2”、“B7”五个不连续的单元格和第二行Cells.Select …选中当前SHEET中的所有单元格 Rows("<行地址>:<行地址>").Select …选中整行 Columns("<列地址>:<列地址>").Select …选中整列 例:Rows(“2:2”). Select…选中第2行 Rows(“2:5”). Select…选中2到5行 Columns("A:A").Select …选中A列 Columns("E:B").Select …选中E到B列

三、设置活动单元格 Range("<单元格地址>").Activate 注:设置活动单元格与选中单元格类似,不同之处就是 后者在选中指定的单元格之前会将在此前已被选中的单元格取消掉。 前者在设置之前不会取消已选中的单元格, 如果此时操作的单元格不是被选中的单元格,这时他实现的功能与选一个单元格相同。 四、给活动的单元格赋值 ActiveCell.FormulaR1C1 = <值> 例:Range("A1").Select ActiveCell.FormulaR1C1 = "Name" Range("B1").Select ActiveCell.FormulaR1C1 = "Age" Range("A2:B3").Select Range("A2").Activate ActiveCell.FormulaR1C1 = " BUG" Range("B2").Activate ActiveCell.FormulaR1C1 = "12" Range("A3").Activate ActiveCell.FormulaR1C1 = "Archer" Range("B3").Activate ActiveCell.FormulaR1C1 = "37"

用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 五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):

相关文档
最新文档