// 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 GUIDIReference string = "61c17706-2d65-11e0-9ae8-d48564015472"
const SignatureIReference string = "{61c17706-2d65-11e0-9ae8-d48564015472}"

type IReference struct {
	ole.IInspectable
}

type IReferenceVtbl struct {
	ole.IInspectableVtbl

	GetValue uintptr
}

func (v *IReference) VTable() *IReferenceVtbl {
	return (*IReferenceVtbl)(unsafe.Pointer(v.RawVTable))
}

func (v *IReference) GetValue() (unsafe.Pointer, error) {
	var out unsafe.Pointer
	hr, _, _ := syscall.SyscallN(
		v.VTable().GetValue,
		uintptr(unsafe.Pointer(v)),    // this
		uintptr(unsafe.Pointer(&out)), // out unsafe.Pointer
	)

	if hr != 0 {
		return nil, ole.NewError(hr)
	}

	return out, nil
}
