mirror of https://github.com/gofiber/fiber.git
128 lines
3.5 KiB
Go
128 lines
3.5 KiB
Go
package oleutil
|
|
|
|
import ole "github.com/gofiber/fiber/v3/internal/go-ole"
|
|
|
|
// ClassIDFrom retrieves class ID whether given is program ID or application string.
|
|
func ClassIDFrom(programID string) (classID *ole.GUID, err error) {
|
|
return ole.ClassIDFrom(programID)
|
|
}
|
|
|
|
// 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 := ole.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 := ole.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) {
|
|
return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_METHOD, params)
|
|
}
|
|
|
|
// 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) {
|
|
return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYGET, params)
|
|
}
|
|
|
|
// 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) {
|
|
return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUT, params)
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
// PutPropertyRef mutates property reference.
|
|
func PutPropertyRef(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT, err error) {
|
|
return disp.InvokeWithOptionalArgs(name, ole.DISPATCH_PROPERTYPUTREF, params)
|
|
}
|
|
|
|
// MustPutPropertyRef mutates property reference or panics.
|
|
func MustPutPropertyRef(disp *ole.IDispatch, name string, params ...interface{}) (result *ole.VARIANT) {
|
|
r, err := PutPropertyRef(disp, name, params...)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
return r
|
|
}
|
|
|
|
func ForEach(disp *ole.IDispatch, f func(v *ole.VARIANT) error) error {
|
|
newEnum, err := disp.GetProperty("_NewEnum")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer newEnum.Clear()
|
|
|
|
enum, err := newEnum.ToIUnknown().IEnumVARIANT(ole.IID_IEnumVariant)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer enum.Release()
|
|
|
|
for item, length, err := enum.Next(1); length > 0; item, length, err = enum.Next(1) {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if ferr := f(&item); ferr != nil {
|
|
return ferr
|
|
}
|
|
}
|
|
return nil
|
|
}
|