Visual Basic中动态链接库的使用
白古勒齐    轩兴涛
(呼和浩特市职工大学)(内蒙古建材工业学校)
  摘 要 该文介绍了在VB如何使用动态链接库(DLL),使用DLL时调用不同类型参数的声明方法,不同类型VB数据的DLL接收不同方式,VB中数组的DLL操作方法及过程。
关键词 Visual Basic 动态链接库(DLL)
  动态链接库(Dy namic Link Libraries,简称DLL)是Microsoft Windo ws的重要特点之一。程序设计人员利用它可以实现应用程序共享代码和资源,这不但可以提高程序的编写效率,而且可以在多任务环境下大大提高程序的执行效率。DLL 的最大优点是:1.由于DLL与用户程序分开,用户可以更新DLL而不用更改已编译过的EXE文件。2.DLL使得我们能够把用C语言编制的数据处理代码动态地链接到用VB开发的应用程序中去,从而可以极大地增强VB的数据处理能力。1 在VB中使用DLL
1.1 声明要使用的DLL子程序
visual basic pdf
要使用的DLL子程序,可以在全局模块(Global Mo dule)中或表格阶层的声明部分(Dec-laratio n Section)中声明。
例1:
Private Declare Function OpenProcess Lib “kernel32”(By Valdw DesiredAccess As Lo ng, By Val BinheritHandle A s Long,By Val dw Pro-cessId A s Lo ng)As Long
Private Declare Functio n CloseHandle Lib “kernel32”(By Val hObject As Long)As Long 1.2 执行DLL子程序
同通用函数的执行方式
例2:
Ret Val=Shell(“C:/WINDOWS/CALC. EXE”,vbNorm alFo cus)
2 VB中各种参数的声明
从上面的例如1中我们看出,在VB中声明DLL子程序时,函数参数的声明是一项很重要的内容。在此讨论应如何在VB中声明DLL所涉及的各种函数参数。
2.1 普通数值参数的声明
普遍数值参数应使用传值(Passed by V alue)方式声明。
格式:By Val date parameter As Data T ype
其中:As DataT ype等效于一个数据类型声明字。
例3:
Declar e Sub M essag eBeep Lib“user”(By Val x As Integer)等效于Declare Sub M essage-Beep Lib“user”(By Val x%)
2.2 Window s类型参数的声明
Window s.h头文件中定义了好几种C语言没有的数据类型,如许多Window s函数需要的各种句柄类型。Window s.h头文件也为一些标准的变量类型定义了新的名称。表1列出了一些常用的Windo ws类型及其相当的C语言和VB语言类型。
   表1常用的W indow s类型及其相当的
C语言和V B语言类型
W indo w s C Visual Basic
Boo l I nt By V al Integ er
Byte U nsig ned Char N/A
W or d U nsig ned Int By V al Integ er
Dw or d U nsigned Lo ng BY Va l L ong
L pstr Char fa r*By Va l Str ing
A tom W or d By V al I nt erg er
Handle W or d By V al Integ er
Hw nd Handle By V al Integ er
Hicon Handle By V al Integ er
Hdc Handle By V al Integ er
Hmenu Handle By V al Integ er
Hbitm ap Handle By V al Integ er
Color r ef Dw or d By Val L ong
2.3 字符串参数的声明
大部分DLL子程序只接受标准的C语言式的字符串(一空字符结尾的字符串)。因此声明字符串参数时,也必须加By Val关键字,以使其成为“C”格式的字符串。
例4:
45
 第27卷          内蒙古石油化工             
Declare Functio n Register Window Message Lib“user”(By Val lpstring As string)
注意:Declare语句须出现在一行之中。
2.4 用户自定义数据类型参数的声明
有些DLL子程序接受VB用户自定义数据类型(U ser defined Data Ty pe)作为参数,此时可以将整个数据结构当作一个参数送给DLL子程序。注意:只能使用传参(Passed by Reference)方式,而不能使用传值(Passed by Value)方式。
例5:在全局模块中定义自定义数据类型
Ty per box
  Left As Integer
top As Integer
right As Integ er
bo tto m As Integ er
End T ype
那么,以库函数为例,此类参数的声明为:
例6:
Declare Sub Draw FocusRect Lib“user”(By Val hdc%,Iprect As bo x)
其中:Draw FocusRect子程序的第二个参数就是使用的传参方式,它前面没有“By Val”关键字。
2.5 指针数据类型参数的声明
C语言中普遍使用的指针参数一般可在VB 中采用传参(Passed by Reference)方式进行声明。
例7:
C函数中用到的形式参数:float*Float Po inter
VB中可声明为:Float Po inter As Single,执行时可用一VB单精度(Single)变量来调用。
特别的,字符串指针的声明则应采用传值(Passed by Value)方式。
3 VB中DLL数据的接收
在VB中使用DLL时经常会遇到这样一个问题,即:如何在VB开发的Window s应用程序中接收来自DLL的数据。为此,下面我们来讨论这个问题。
3.1 整型数据的接收
对于整型数据,我们可以很简单地利用返回—接收方式实现这一过程;一方面,在DLL实现时,用return语句返回一个整型变量(int类型);另一方面,在VB中定义一个整型变量(Integer 类型)接收。3.2 其他数据类型的接收
对于其他数据类型,则不能简单地利用返回—接收方式,而是利用VB提供的传参(Passed by reference)方式借助于函数参数来接收非整型数据。
4 VB中数组的DLL操作
在数据处理的VB编程中,经常要用到DLL 子程序对VB中的数组进行处理。对VB数组进行DLL操作的关键在于:DLL子程序在C语言中如何实现、DLL子程序在VB中如何声明以及如何对具体的VB数组进行操作等。
4.1 子程序的实现
用C语言实现处理VB数组的DLL子程序时,子程序至少应有两个接口参数(形式参数):一个用于标识VB数组在内存中的起始位置,应定义为远程数据指针类型;另一个用于标识VB数组的大小。然后就可以编写如同普通C程序一样实现该子程序了。
4.2 子程序的声明
声明DLL子程序时,除应按照一、二部分中讨论的要点外,还需强调的一点是:子程序中用于标识VB数组在内存中的超始位置并被定义为远程数据指针类型的参数必须采用传参(Passed by Reference)方式声明,这样才能保证将来调用DLL子程序时,传给DLL子程序的为一地址而非数值。
4.3 子程序的执行
执行时,一般应用VB数组的第一个元素及数组的大小为参数(实参)去调用DLL子程序。值得一提的是,对应于DLL子程序实现时定义的远程数据指针,执行时应该用VB数组的某个元素去调用。
参考文献
〔1〕R ob T hay er〔美〕.《循序渐进学用V isual Basic6.0》.
西蒙舒斯特国际出版公司
〔2〕R ob T hay er〔美〕.《循序渐进学用V isual Basic6.0数据库编程》.西蒙舒斯特国际出版公司
〔3〕R ob T hay er〔美〕.《循序渐进学用V isual Basic6.0揭秘》.西蒙舒斯特国际出版公司
〔4〕李怀明.《Visual Ba sic6.0参考详解》.清华大学出版社
〔5〕M icro soft〔美〕.《V isual Basic6.0组件工具指南》.〔6〕刘小石等.《精通Visual C++》.清华大学出版社〔7〕Chuck W oo d〔美〕.《V isual C++  6.0数据库编程大全》.电子工业出版社
收稿日期:2002年1月5日
46
           Visual Basic中动态链接库的使用       第27卷 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。