blob: 85288f6e452d988aed77d8c8973faa48fc5591f6 [file] [log] [blame]
package oleutil
import ole "github.com/go-ole/go-ole"
// ClassIDFrom retrieves class ID whether given is program ID or application string.
func ClassIDFrom(programID string) (classID *ole.GUID, err error) {
classID, err = ole.CLSIDFromProgID(programID)
if err != nil {
classID, err = ole.CLSIDFromString(programID)
if err != nil {
return
}
}
return
}
// CreateObject creates object from programID based on interface type.
//
// Only supports IUnknown.
//
// Program ID can be either program ID or application string.
func CreateObject(programID string) (unknown *ole.IUnknown, err error) {
classID, err := ClassIDFrom(programID)
if err != nil {
return
}
unknown, err = ole.CreateInstance(classID, ole.IID_IUnknown)
if err != nil {
return
}
return
}
// GetActiveObject retrieves active object for program ID and interface ID based
// on interface type.
//
// Only supports IUnknown.
//
// Program ID can be either program ID or application string.
func GetActiveObject(programID string) (unknown *ole.IUnknown, err error) {
classID, err := ClassIDFrom(programID)
if err != nil {
return
}
unknown, err = ole.GetActiveObject(classID, ole.IID_IUnknown)
if err != nil {
return
}
return
}
// CallMethod calls method on IDispatch with parameters.
func CallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
var dispid []int32
dispid, err = disp.GetIDsOfName([]string{name})
if err != nil {
return
}
if len(params) < 1 {
result, err = disp.Invoke(dispid[0], ole.DISPATCH_METHOD)
} else {
result, err = disp.Invoke(dispid[0], ole.DISPATCH_METHOD, params...)
}
return
}
// MustCallMethod calls method on IDispatch with parameters or panics.
func MustCallMethod(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
r, err := CallMethod(disp, name, params...)
if err != nil {
panic(err.Error())
}
return r
}
// GetProperty retrieves property from IDispatch.
func GetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
var dispid []int32
dispid, err = disp.GetIDsOfName([]string{name})
if err != nil {
return
}
if len(params) < 1 {
result, err = disp.Invoke(dispid[0], ole.DISPATCH_PROPERTYGET)
} else {
result, err = disp.Invoke(dispid[0], ole.DISPATCH_PROPERTYGET, params...)
}
return
}
// MustGetProperty retrieves property from IDispatch or panics.
func MustGetProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
r, err := GetProperty(disp, name, params...)
if err != nil {
panic(err.Error())
}
return r
}
// PutProperty mutates property.
func PutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
var dispid []int32
dispid, err = disp.GetIDsOfName([]string{name})
if err != nil {
return
}
if len(params) < 1 {
result, err = disp.Invoke(dispid[0], ole.DISPATCH_PROPERTYPUT)
} else {
result, err = disp.Invoke(dispid[0], ole.DISPATCH_PROPERTYPUT, params...)
}
return
}
// MustPutProperty mutates property or panics.
func MustPutProperty(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
r, err := PutProperty(disp, name, params...)
if err != nil {
panic(err.Error())
}
return r
}