| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package ole
- import "unsafe"
- type IUnknown struct {
- RawVTable *interface{}
- }
- type IUnknownVtbl struct {
- QueryInterface uintptr
- AddRef uintptr
- Release uintptr
- }
- type UnknownLike interface {
- QueryInterface(iid *GUID) (disp *IDispatch, err error)
- AddRef() int32
- Release() int32
- }
- func (v *IUnknown) VTable() *IUnknownVtbl {
- return (*IUnknownVtbl)(unsafe.Pointer(v.RawVTable))
- }
- func (v *IUnknown) PutQueryInterface(interfaceID *GUID, obj interface{}) error {
- return reflectQueryInterface(v, v.VTable().QueryInterface, interfaceID, obj)
- }
- func (v *IUnknown) IDispatch(interfaceID *GUID) (dispatch *IDispatch, err error) {
- err = v.PutQueryInterface(interfaceID, &dispatch)
- return
- }
- func (v *IUnknown) IEnumVARIANT(interfaceID *GUID) (enum *IEnumVARIANT, err error) {
- err = v.PutQueryInterface(interfaceID, &enum)
- return
- }
- func (v *IUnknown) QueryInterface(iid *GUID) (*IDispatch, error) {
- return queryInterface(v, iid)
- }
- func (v *IUnknown) MustQueryInterface(iid *GUID) (disp *IDispatch) {
- unk, err := queryInterface(v, iid)
- if err != nil {
- panic(err)
- }
- return unk
- }
- func (v *IUnknown) AddRef() int32 {
- return addRef(v)
- }
- func (v *IUnknown) Release() int32 {
- return release(v)
- }
|