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

Simon_a_ 2012-10-18 10:13:45
DLL_CON int FindX(CONX* pstX, int Count, int TimeOut);这个是接口函数在VB里应该怎么调用,怎么声明,高手指点下
DLL是别人写的没有代码的
...全文
262 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2012-10-19
  • 打赏
  • 举报
回复
如果你希望在 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)
现在还是人类 2012-10-18
  • 打赏
  • 举报
回复
所有的指针都可以理解为一个能存放地址的空间,只要按照地址空间存放大小来声明就可以了,比如在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
Simon_a_ 2012-10-18
  • 打赏
  • 举报
回复
CONX* pstX 是 一个结构类型的,我在调用时应该怎样来传值?
of123 2012-10-18
  • 打赏
  • 举报
回复
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)

1,487

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧