Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port to arm64 #113

Merged
merged 1 commit into from
Feb 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
98 changes: 98 additions & 0 deletions oleacc_arm64.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
// Copyright 2010 The win Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows,arm64

package win

import (
"syscall"
"unsafe"
)

func (idProp *MSAAPROPID) split() (uintptr, uintptr) {
if idProp == nil {
return 0, 0
}
x := (*struct { a, b uintptr })(unsafe.Pointer(idProp))
return x.a, x.b
}

// SetPropValue identifies the accessible element to be annotated, specify the property to be annotated, and provide a new value for that property.
// If server developers know the HWND of the accessible element they want to annotate, they can use one of the following methods: SetHwndPropStr, SetHwndProp, or SetHwndPropServer
func (obj *IAccPropServices) SetPropValue(idString []byte, idProp *MSAAPROPID, v *VARIANT) HRESULT {
var idStringPtr unsafe.Pointer
idStringLen := len(idString)
if idStringLen != 0 {
idStringPtr = unsafe.Pointer(&idString[0])
}
propA, propB := idProp.split()
ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetPropValue, 6,
uintptr(unsafe.Pointer(obj)),
uintptr(idStringPtr),
uintptr(idStringLen),
propA, propB,
uintptr(unsafe.Pointer(v)))
return HRESULT(ret)
}

// SetHwndProp wraps SetPropValue, providing a convenient entry point for callers who are annotating HWND-based accessible elements. If the new value is a string, you can use SetHwndPropStr instead.
func (obj *IAccPropServices) SetHwndProp(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT {
propA, propB := idProp.split()
ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndProp, 7,
uintptr(unsafe.Pointer(obj)),
uintptr(hwnd),
uintptr(idObject),
uintptr(idChild),
propA, propB,
uintptr(unsafe.Pointer(v)),
0, 0)
return HRESULT(ret)
}

// SetHwndPropStr wraps SetPropValue, providing a more convenient entry point for callers who are annotating HWND-based accessible elements.
func (obj *IAccPropServices) SetHwndPropStr(hwnd HWND, idObject int32, idChild uint32, idProp *MSAAPROPID, str string) HRESULT {
str16, err := syscall.UTF16PtrFromString(str)
if err != nil {
return -((E_INVALIDARG ^ 0xFFFFFFFF) + 1)
}
propA, propB := idProp.split()
ret, _, _ := syscall.Syscall9(obj.LpVtbl.SetHwndPropStr, 7,
uintptr(unsafe.Pointer(obj)),
uintptr(hwnd),
uintptr(idObject),
uintptr(idChild),
propA, propB,
uintptr(unsafe.Pointer(str16)),
0, 0)
return HRESULT(ret)
}

// SetHmenuProp wraps SetPropValue, providing a convenient entry point for callers who are annotating HMENU-based accessible elements. If the new value is a string, you can use IAccPropServices::SetHmenuPropStr instead.
func (obj *IAccPropServices) SetHmenuProp(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, v *VARIANT) HRESULT {
propA, propB := idProp.split()
ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetHmenuProp, 6,
uintptr(unsafe.Pointer(obj)),
uintptr(hmenu),
uintptr(idChild),
propA, propB,
uintptr(unsafe.Pointer(v)))
return HRESULT(ret)
}

// SetHmenuPropStr wraps SetPropValue, providing a more convenient entry point for callers who are annotating HMENU-based accessible elements.
func (obj *IAccPropServices) SetHmenuPropStr(hmenu HMENU, idChild uint32, idProp *MSAAPROPID, str string) HRESULT {
str16, err := syscall.UTF16PtrFromString(str)
if err != nil {
return -((E_INVALIDARG ^ 0xFFFFFFFF) + 1)
}
propA, propB := idProp.split()
ret, _, _ := syscall.Syscall6(obj.LpVtbl.SetHmenuPropStr, 6,
uintptr(unsafe.Pointer(obj)),
uintptr(hmenu),
uintptr(idChild),
propA, propB,
uintptr(unsafe.Pointer(str16)))
return HRESULT(ret)
}
2 changes: 1 addition & 1 deletion oleaut32_64.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows,amd64
// +build windows,amd64 windows,arm64

package win

Expand Down
2 changes: 1 addition & 1 deletion shobj_64.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build windows,amd64
// +build windows,amd64 windows,arm64

package win

Expand Down