【发布时间】:2015-10-07 22:52:43
【问题描述】:
我在 32 位 Excel 中使用这个 Windows API 调用,它工作正常:
Declare Function WNetGetConnection Lib "MPR.DLL" _
Alias "WNetGetConnectionA" ( _
ByVal lpszLocalName As String, _
ByVal lpszRemoteName As String, _
lSize As Long) As Long
有人告诉我,我们的一小部分企业用户很快就会使用 64 位 Excel。我无法访问 64 位 Excel,也找不到附近的同事。
根据这个文件,如果我没看错的话……
http://www.cadsharp.com/docs/Win32API_PtrSafe.txt
...这是该函数在 64 位 Excel 中的正确语法:
Declare PtrSafe Function WNetGetConnection Lib "MPR.DLL" _
Alias "WNetGetConnectionA" ( _
ByVal lpszLocalName As String, _
ByVal lpszRemoteName As String, _
lSize As Long) As Long
但这是正确的吗?唯一的区别是添加了 PtrSafe。它是否应该指向不同的 64 位版本的 MPR.DLL?另外,lSize 应该是 LongLong 而不是 Long?
【问题讨论】:
-
请不要要求我们为您进行测试。自己安装 64 位 Excel。
-
“测试”不是在 Excel 中确定 API 声明的可靠方法。首先,Excel 在 API 调用后进行堆栈校正:隐藏声明错误:在这种情况下,它将隐藏返回值的位长度错误。其次,测试 API 需要一个已知有效的测试框架,而这几乎从来都不是这样。第三 - 一些 API 具有几乎从未使用过的可选术语,从而导致隐藏错误。