2014-03-02 43 views
0

我在寫一個使用宏的vba應用程序。我正在嘗試使用RegQueryValueEx讀取IMAP端口的雙字值。調用成功,但我參數lpcbData點爲0。這裏是我的聲明RegQueryValueEx調用成功,但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位窗口的問題。

回答

1

好吧,我發現它爲什麼返回一個零。首先,dword值是使用ASCII而不是unicode存儲的。萬一別人運行到同樣的問題,正確的聲明如下:

私人聲明PTRSAFE功能RegQueryValueExDword庫「ADVAPI32.DLL」別名「函數RegQueryValueExA」(BYVAL的hKey作爲LongPtr,BYVAL lpValueName作爲字符串,BYVAL lpReserved作爲LongPtr,lpType As LongPtr,lpData As Any,lpcbData As LongPtr)As LongPtr

相關問題