我試圖調用WinHttpGetIEProxyConfigForCurrentUser
函數來獲取自動檢測到的IE代理設置。它接受根據documentation的inout結構參數。我使用下面的代碼:golang:winapi調用結構參數
func GetProxySettings() {
winhttp, _ := syscall.LoadLibrary("winhttp.dll")
getIEProxy, _ := syscall.GetProcAddress(winhttp, "WinHttpGetIEProxyConfigForCurrentUser")
settings := new(WINHTTP_CURRENT_USER_IE_PROXY_CONFIG)
var nargs uintptr = 1
ret, _, callErr := syscall.Syscall(uintptr(getIEProxy), nargs, uintptr(unsafe.Pointer(&settings)), 0, 0)
fmt.Println(ret, callErr)
if settings != nil {
fmt.Println(settings.fAutoDetect)
fmt.Println(settings.lpszAutoConfigUrl)
fmt.Println(settings.lpszProxy)
fmt.Println(settings.lpszProxyBypass)
}
}
type WINHTTP_CURRENT_USER_IE_PROXY_CONFIG struct {
fAutoDetect bool
lpszAutoConfigUrl string
lpszProxy string
lpszProxyBypass string
}
它看起來像調用成功,settings
不是零,但只要我訪問它,我得到的恐慌。下面是輸出:
1 The operation completed successfully.
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x1 pc=0x4d2bb4]
Go字符串與C字符串不同,在這種情況下,文檔看起來像字段應該是寬字符(?),所以這些應該可能是'* uint16'而不是字符串。你還傳遞一個指向系統調用的指針,它只需要一個指針。擺脫參數中額外的'&'。 – JimB
感謝您的提示。如何將'* uint16'轉換爲去串?我發現'UTF16PtrFromString'做了相反的轉換,但沒有任何東西可以轉換回來。 – rosencreuz