我正在使用宏编写vba应用程序。我正在尝试使用RegQueryValueEx读取IMAP端口的双字值。调用成功但我lpcbData指向0.这是我的声明
Private Declare PtrSafe Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExW" (ByVal hKey As LongPtr, ByVal lpValueName As LongPtr, ByVal lpReserved As LongPtr, lpType As LongPtr, ByVal lpData As LongPtr, lpcbData As LongPtr) As LongPtr
If RegQueryValueExStr(hKey, StrPtr(queryFieldName), 0, dwType, port, dwBufSize) = ERROR_SUCCESS Then
Dim wport As String
'wport = StrConv(port, vbUnicode)
EnumerateAccounts = EnumerateAccounts & fieldvalue & ": " & wport & "\n\r"
End If
上面的代码编写得不是很好,我只是试图破解一些代码来读取端口值。 我在C ++应用程序中使用相同的代码,因此它不是32/64位窗口的问题。
答案 0 :(得分:1)
好的,所以我发现为什么它会返回零。首先,使用ASCII而不是unicode存储dword值。如果其他人遇到同样的问题,正确的声明如下:
私有声明PtrSafe函数RegQueryValueExDword Lib“advapi32.dll”别名“RegQueryValueExA”(ByVal hKey As LongPtr,ByVal lpValueName As String,ByVal lpReserved As LongPtr,lpType As LongPtr,lpData As Any,lpcbData As LongPtr)As LongPtr