VBA内如何处理调用dll里的Null参数

bluesnail1986 2016-09-21 02:29:05
VBA里调用dll里的函数,这些函数有可能有指针类型的参数,而有时候调用时这些参数不能传有效值进去。例如ReadFile,最后一个参数如果是Null就代表用同步的方式去读取COM口数据。问题是,在VBA里调用这种函数时,怎么将ByRef传递的参数写成空呢?
...全文
219 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesnail1986 2016-09-22
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
你要把参数类型改为Long、 或者 Any 。 调用时 Byval 0 就表示“NULL”。
嗯,今天找到方法了,是我自己把指针和ByRef理解混淆了。 不过你说的是对的。
舉杯邀明月 2016-09-21
  • 打赏
  • 举报
回复
你要把参数类型改为Long、 或者 Any 。 调用时 Byval 0 就表示“NULL”。
bluesnail1986 2016-09-21
  • 打赏
  • 举报
回复
引用 1 楼 of123 的回复:
试试直接写 0。 例: Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long SendMessagebyString cboFile.hWnd, CB_SETDROPPEDWIDTH, DROPPEDWIDTH, 0
回错帖子了,回给我自己了... 试过了,会报错,提示与ByRef类型不匹配 不止是0,Null/Nothing也都试过,都不行 Private Declare PtrSafe Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long 最后一个参数,怎么写成空?
bluesnail1986 2016-09-21
  • 打赏
  • 举报
回复
引用 楼主 bluesnail1986 的回复:
VBA里调用dll里的函数,这些函数有可能有指针类型的参数,而有时候调用时这些参数不能传有效值进去。例如ReadFile,最后一个参数如果是Null就代表用同步的方式去读取COM口数据。问题是,在VBA里调用这种函数时,怎么将ByRef传递的参数写成空呢?
试过了,会报错,提示与ByRef类型不匹配 不止是0,Null/Nothing也都试过,都不行 Private Declare PtrSafe Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long 最后一个参数,怎么写成空?
of123 2016-09-21
  • 打赏
  • 举报
回复
试试直接写 0。 例: Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, _ ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long SendMessagebyString cboFile.hWnd, CB_SETDROPPEDWIDTH, DROPPEDWIDTH, 0

2,503

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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