WinHttpGetIEProxyConfigForCurrentUser
함수를 호출하여 자동으로 탐지 된 IE 프록시 설정을 가져 오려고합니다. documentation에 따라 inout 구조체 매개 변수를 허용합니다.golang : struct 매개 변수가있는 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'이어야합니다 . 또한 포인터 하나만 필요로하는 syscall에 대한 포인터에 대한 포인터를 전달하고 있습니다. 인수에서 여분의'&'를 제거하십시오. – JimB
팁 주셔서 감사. '* uint16'을 go 문자열로 변환하려면 어떻게해야합니까? 반대 변환을하는'UTF16PtrFromString'을 찾았지만 다시 변환 할 것은 없습니다. – rosencreuz