可以!
其实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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)