diff --git a/windows/foundation/hresult.go b/windows/foundation/hresult.go new file mode 100644 index 0000000..e651707 --- /dev/null +++ b/windows/foundation/hresult.go @@ -0,0 +1,12 @@ +// Code generated by winrt-go-gen. DO NOT EDIT. + +//go:build windows + +//nolint:all +package foundation + +const SignatureHResult string = "struct(Windows.Foundation.HResult;i4)" + +type HResult struct { + Value int32 +} diff --git a/windows/foundation/iasyncinfo.go b/windows/foundation/iasyncinfo.go new file mode 100644 index 0000000..50ccb83 --- /dev/null +++ b/windows/foundation/iasyncinfo.go @@ -0,0 +1,105 @@ +// Code generated by winrt-go-gen. DO NOT EDIT. + +//go:build windows + +//nolint:all +package foundation + +import ( + "syscall" + "unsafe" + + "github.com/go-ole/go-ole" +) + +const GUIDIAsyncInfo string = "00000036-0000-0000-c000-000000000046" +const SignatureIAsyncInfo string = "{00000036-0000-0000-c000-000000000046}" + +type IAsyncInfo struct { + ole.IInspectable +} + +type IAsyncInfoVtbl struct { + ole.IInspectableVtbl + + GetId uintptr + GetStatus uintptr + GetErrorCode uintptr + Cancel uintptr + Close uintptr +} + +func (v *IAsyncInfo) VTable() *IAsyncInfoVtbl { + return (*IAsyncInfoVtbl)(unsafe.Pointer(v.RawVTable)) +} + +func (v *IAsyncInfo) GetId() (uint32, error) { + var out uint32 + hr, _, _ := syscall.SyscallN( + v.VTable().GetId, + uintptr(unsafe.Pointer(v)), // this + uintptr(unsafe.Pointer(&out)), // out uint32 + ) + + if hr != 0 { + return 0, ole.NewError(hr) + } + + return out, nil +} + +func (v *IAsyncInfo) GetStatus() (AsyncStatus, error) { + var out AsyncStatus + hr, _, _ := syscall.SyscallN( + v.VTable().GetStatus, + uintptr(unsafe.Pointer(v)), // this + uintptr(unsafe.Pointer(&out)), // out AsyncStatus + ) + + if hr != 0 { + return AsyncStatusCanceled, ole.NewError(hr) + } + + return out, nil +} + +func (v *IAsyncInfo) GetErrorCode() (HResult, error) { + var out HResult + hr, _, _ := syscall.SyscallN( + v.VTable().GetErrorCode, + uintptr(unsafe.Pointer(v)), // this + uintptr(unsafe.Pointer(&out)), // out HResult + ) + + if hr != 0 { + return HResult{}, ole.NewError(hr) + } + + return out, nil +} + +func (v *IAsyncInfo) Cancel() error { + hr, _, _ := syscall.SyscallN( + v.VTable().Cancel, + uintptr(unsafe.Pointer(v)), // this + ) + + if hr != 0 { + return ole.NewError(hr) + } + + return nil +} + +func (v *IAsyncInfo) Close() error { + hr, _, _ := syscall.SyscallN( + v.VTable().Close, + uintptr(unsafe.Pointer(v)), // this + ) + + if hr != 0 { + return ole.NewError(hr) + } + + return nil +} diff --git a/winrt.go b/winrt.go index 406a67d..7dd8468 100644 --- a/winrt.go +++ b/winrt.go @@ -5,6 +5,8 @@ package winrt //go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.IAsyncOperation`1 //go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.AsyncOperationCompletedHandler`1 //go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.AsyncStatus +//go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.IAsyncInfo +//go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.HResult //go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.DateTime //go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.TimeSpan //go:generate go run github.com/saltosystems/winrt-go/cmd/winrt-go-gen -debug -class Windows.Foundation.Deferral