2016-02-12 18:02:16 +00:00
|
|
|
// Copyright 2010-2012 The W32 Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
2017-02-02 06:25:39 +00:00
|
|
|
// +build windows
|
|
|
|
|
2016-02-12 18:02:16 +00:00
|
|
|
package w32
|
|
|
|
|
|
|
|
import (
|
|
|
|
"syscall"
|
|
|
|
"unsafe"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
modoleaut32 = syscall.NewLazyDLL("oleaut32")
|
|
|
|
|
|
|
|
procVariantInit = modoleaut32.NewProc("VariantInit")
|
|
|
|
procSysAllocString = modoleaut32.NewProc("SysAllocString")
|
|
|
|
procSysFreeString = modoleaut32.NewProc("SysFreeString")
|
|
|
|
procSysStringLen = modoleaut32.NewProc("SysStringLen")
|
|
|
|
procCreateDispTypeInfo = modoleaut32.NewProc("CreateDispTypeInfo")
|
|
|
|
procCreateStdDispatch = modoleaut32.NewProc("CreateStdDispatch")
|
|
|
|
)
|
|
|
|
|
|
|
|
func VariantInit(v *VARIANT) {
|
|
|
|
hr, _, _ := procVariantInit.Call(uintptr(unsafe.Pointer(v)))
|
|
|
|
if hr != 0 {
|
|
|
|
panic("Invoke VariantInit error.")
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func SysAllocString(v string) (ss *int16) {
|
|
|
|
pss, _, _ := procSysAllocString.Call(uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(v))))
|
|
|
|
ss = (*int16)(unsafe.Pointer(pss))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func SysFreeString(v *int16) {
|
|
|
|
hr, _, _ := procSysFreeString.Call(uintptr(unsafe.Pointer(v)))
|
|
|
|
if hr != 0 {
|
|
|
|
panic("Invoke SysFreeString error.")
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
func SysStringLen(v *int16) uint {
|
|
|
|
l, _, _ := procSysStringLen.Call(uintptr(unsafe.Pointer(v)))
|
|
|
|
return uint(l)
|
|
|
|
}
|