| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package oleutil
- import ole "github.com/gofiber/fiber/v2/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
- }
|