我试图调用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