vba - 是否可以在 Visual Basic 中使用返回类型的 Windows API 函数调用?3个问题
问题描述
问题 1:为什么将其声明为函数而不是子函数?
在 Excel VBA 中调用 windows API 函数时,例如
Private Declare Function getTickCount Lib "kernel32" _
Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long
可以调用
Dim cyTicks1 As Currency
getTickCount cyTicks1
它只设置的值cyTicks1
(因为参数是一个指针),为什么它在文档中定义为一个函数而不仅仅是一个子。为什么不在 VBA 中编写函数为
Private Declare Sub getTickCount Lib "kernel32" _
Alias "QueryPerformanceCounter" (cyTickCount As Currency)
?
此外,在这个特定函数(QueryPerformanceCounter)的文档中,它是
'Return value
'If the function succeeds, the return value is nonzero.
'If the function fails, the return value is zero.
然而,试图对返回值做任何事情,都会导致语法错误:
问题2:为什么不能使用这些函数的返回值?
一个函数需要一个返回类型(在这个例子中As Long
),但是当尝试使用返回类型时,它会立即显示为红线,当尝试编译或运行代码时会出现语法错误:
Dim QPSresult as Long 'same type as return type of function above
QPSresult = getTickCount cyTicks1 'red line/syntax error.
getTickCount-function 明确声明为函数。在撰写本文时,Visual Basic 还不知道我正在调用一个实际上只通过指针检索(而不是返回)一个值的 kernell32 函数。所有这些 api/library 调用是否仅适用于指针,因此永远无法存储/使用结果类型?
问题 3:有没有办法捕捉“非零”值?
'If the function succeeds, the return value is nonzero.
当函数的返回类型As Long
更改为As Byte
或 时As Currency
,它似乎没有任何影响。但是将其更改为“作为字符串”会使 Excel 崩溃。我猜 kernel32 会向 VBA 返回一个“非零”值,该值仅在数据类型等数字中被接受。但是,由于语法错误,有没有办法存储这些非零值?
解决方案
推荐阅读
- javascript - javascript中的简单iframe?
- database - Cassandra 集群上的数据分区和复制
- docker - 水平扩展聊天日志工作者
- installation - Pip3安装pygame不工作
- c# - 如何在不干扰实时服务器上的数据的情况下将文档从实时服务器隔离到新文档服务器?
- java - 如何通过我的代码(pom.xml)或命令提示符设置我的 maven setting.xml
- delphi - 使用 TIdAttachmentFile 将嵌入图像添加到电子邮件
- java - Jackson XML:如何使用带有多个包装类的 JacksonXmlElementWrapper 反序列化 XML
- c# - 随机值似乎不是真正随机的?
- javascript - 带有外部png的SVG到Node中的PNG