当前位置:编程学习 > VB >>

vb调用VC做的DLL,指针应该怎么样声明

DLL_CON int  FindX(CONX* pstX, int Count, int TimeOut);这个是接口函数在VB里应该怎么调用,怎么声明,高手指点下
DLL是别人写的没有代码的 --------------------编程问答-------------------- 所有的指针都可以理解为一个能存放地址的空间,只要按照地址空间存放大小来声明就可以了,比如在32位操作系统中,地址空间大小为4个字节,所以可以用Long类型来声明,如果是64位操作系统,地址空间大小为8个字节,所以可以用 Currency 类型来声明,当然,也可以用 Any 来不指定类型,如 pstX As Any。
还有就是要注意的是 ByVal 和 ByRef 的问题,在 VB 中,默认情况下是以地址传送的,也就是ByRef方式,即使如 pstX As Any 这样的参数传递写法,也就相当与 ByRef pstX As Any,这种写法,对于指针类型参数用这种地址传送方式是比较合适的,但对于普通的参数传递来说,应该按值来传递参数,如:ByVal TimeOut As Integer,当然,也可以在声明时不指定这种传递方式,但在调用时就需要是指定了,如:

Private Declare Function FindX Lib "xxx.dll" (ByVal pstX As Any, TimeOut As Integer) As Integer

Private Sub Form_Load()
    Dim tmp(100) As Byte
    Dim TimeOut As Integer
    TimeOut = 50
    FindX tmp(0), ByVal TimeOut
End Sub

当然,调用起来越简单越好,所以通常我们会这样声明和调用

Private Declare Function FindX Lib "xxx.dll" (ByVal pstX As Any, ByVal TimeOut As Integer) As Integer

Private Sub Form_Load()
    Dim tmp(100) As Byte
    Dim TimeOut As Integer
    TimeOut = 50
    FindX tmp(0), TimeOut
End Sub
--------------------编程问答-------------------- Private Declare Function FindX Lib "xxx.dll" (ByRef pstX As Byte, Byval Count As Long, Byval TimeOut As Long) As Long

ret = FindX(x(0), Count, Timeout)

--------------------编程问答-------------------- CONX* pstX 是 一个结构类型的,我在调用时应该怎样来传值? --------------------编程问答-------------------- 如果你希望在 VB 端也采用类似结构的东西,可以声明一个自定义类型,然后传址引用。例如:

Public Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type

Public Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

Dim CreateTime As FILETIME, LastAccessTime As FILETIME, LastWriteTime As FILETIME

Call GetFileTime(hFile, CreateTime, LastAccessTime, LastWriteTime) --------------------编程问答--------------------
补充:VB ,  API
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,