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

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

可以!

其实vb调dll,只需要函数名就可以了

但是要确保函数名没错

vb的

declare语句就是专门用来申明dll函数的

public

declare

function

getnpmversion

lib

"你vcdll的文件名dll"

(参数说明)

as

返回值类型

vb2005中:

首先进行声明

Public Structure BasicInfoV4

public serialno as int32

public ValidateTime as CHAR()

public IdentityCard as CHAR()

public DepartmentNo as CHAR()

public ICCardNo as CHAR()

public name as CHAR()

public gender as char

end Structure

public declare ansi function bb lib "dll文件位置"(byval icdev as int32,byref bifv as BasicInfoV4

,byref CardSN as uint32) as int32

'如果原函数为unicode类型

public declare unicode function bb lib "dll文件位置"(byval icdev as int32,byref bifv as BasicInfoV4,

byref CardSN as uint32) as int32

或者:public declare auto function bb lib "dll文件位置"(byval icdev as int32,byref bifv as BasicInfoV4,byref CardSN as uint32) as int32‘自动选择类型

如果出现错误,把两个byref 分别改为byval 再试一下。

至于调用,像正常vb函数一样调用就可以了。

vb60中使用时改成对应的数据类型

如果实在不行,把as CHAR()改为 as string 试一下。在vb2005中,结构的定义中,不能对数组定义大小。

要声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为

Function:

   Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]])] As Type

   如果过程没有返回值,可将其声明为Sub:

   Declare Sub publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]])]

  缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。

  (一)、指定动态库:

  Declare语句中的Lib子句用来告诉Visual Basic如何找到包含过程的dll文件。 如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:

   Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long

   对于其它动态连接库,可以在Lib子句指定文件的路径:

   Declare Function lzCopy Lib "c:/windows/lzexpanddll" _

   (ByVal S As Integer, ByVal D As Integer) As Long

如果未指定libname的路径,Visual Basic将按照下列顺序查找该文件:

  ①exe文件所在的目录

  ②当前目录

  ③Windows系统目录

  ④Windows目录

  ⑤Path环境变量中的目录

  下表中列出了常用的 *** 作系统环境库文件。

  动态链接库描述

  Advapi32dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)

  Comdlg32dll通用对话框API库

  Gdi32dll图形设备接口API库

  Kernel32dllWindows32位核心的API支持

  Lz32dll32位压缩例程

  Mprdll多接口路由器库

  Netapi32dll32位网络API库

  Shell32dll32位ShellAPI库

  User32dll用户接口例程库

  Versiondll版本库

  WinmmdllWindows多媒体库

  Winspooldrv后台打印接口,包含后台打印API调用。

  对于Windows的系统API函数,可以利用VB提供的工具API Viewer查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。

Private Declare Function c_Test Lib "c:\collisiondll" (ByRef a As Single, ByRef a_0 As Single) As Long

Private Sub Command1_Click()

Dim b(7) As Single

Dim b_0(7) As Single

For i = 0 To 7

b(i) = 1

b_0(i) = 1

Next i

Label1Caption = c_Test(b(0), b_0(0))

End Sub

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存