Beispiel #1
0
 public void Dispose()
 {
     if (variant != IntPtr.Zero)
     {
         NativeApiProxy.FreeVariant(variant);
     }
 }
Beispiel #2
0
        public void Assign(IValue value, Int32 number = 0)
        {
            switch (value.DataType)
            {
            case DataType.String:
                String str = value.AsString();
                NativeApiProxy.SetVariantStr(variant, number, str, str.Length);
                break;

            case DataType.Boolean:
                NativeApiProxy.SetVariantBool(variant, number, value.AsBoolean());
                break;

            case DataType.Number:
                Decimal num = value.AsNumber();
                if (num % 1 == 0)
                {
                    NativeApiProxy.SetVariantInt(variant, number, Convert.ToInt32(value.AsNumber()));
                }
                else
                {
                    NativeApiProxy.SetVariantReal(variant, number, Convert.ToDouble(value.AsNumber()));
                }
                break;

            case DataType.Object when value.AsObject() is BinaryDataContext binaryData:
                NativeApiProxy.SetVariantBlob(variant, number, binaryData.Buffer, binaryData.Buffer.Length);

                break;

            default:
                NativeApiProxy.SetVariantEmpty(variant, number);
                break;
            }
        }
        public void SetPropValue(int propNum, IValue newVal)
        {
            var variant = new NativeApiVariant();

            variant.SetValue(newVal);
            NativeApiProxy.SetPropVal(_object, propNum, ref variant);
            variant.Clear();
        }
Beispiel #4
0
 public void SetPropValue(int propNum, IValue value)
 {
     using (var variant = new NativeApiVariant())
     {
         variant.Assign(value);
         NativeApiProxy.SetPropVal(_object, propNum, variant.Ptr);
     };
 }
        public string GetPropName(int propNum)
        {
            var name = String.Empty;

            NativeApiProxy.GetPropName(_object, propNum, 0,
                                       n => name = NativeApiProxy.Str(n)
                                       );
            return(name);
        }
        public IValue GetPropValue(int propNum)
        {
            var result = ValueFactory.Create();

            NativeApiProxy.GetPropVal(_object, propNum,
                                      variant => result = NativeApiVariant.GetValue(variant)
                                      );
            return(result);
        }
        public int FindProperty(string name)
        {
            var propNumber = NativeApiProxy.FindProp(_object, name);

            if (propNumber < 0)
            {
                throw RuntimeException.PropNotFoundException(name);
            }
            return(propNumber);
        }
Beispiel #8
0
 public NativeApiComponent(IHostApplication host, NativeApiLibrary library, String typeName, String componentName)
 {
     _host   = host;
     _object = NativeApiProxy.GetClassObject(library.Module, componentName,
                                             (wcode, source, descr, scode) => _host.Echo("ОШИБКА: " + S(source) + " - " + S(descr), Status(wcode)),
                                             (source, message, data) => _host.Echo("СОБЫТИЕ: " + S(source) + " - " + S(message) + " - " + S(data)),
                                             (status) => _host.Echo("СТАТУС: " + S(status))
                                             );
     DefineType(TypeManager.GetTypeByName(typeName));
 }
        public int FindMethod(string name)
        {
            var methodNumber = NativeApiProxy.FindMethod(_object, name);

            if (methodNumber < 0)
            {
                throw RuntimeException.MethodNotFoundException(name);
            }
            return(methodNumber);
        }
 private void SetDefValues(int methodNumber, int paramCount, IValue[] arguments)
 {
     for (int i = 0; i < paramCount; i++)
     {
         if (arguments[i] == null)
         {
             NativeApiProxy.GetParamDefValue(_object, methodNumber, i,
                                             variant => arguments[i] = NativeApiVariant.GetValue(variant)
                                             );
         }
     }
 }
Beispiel #11
0
        public void CallAsProcedure(int methodNumber, IValue[] arguments)
        {
            int paramCount = NativeApiProxy.GetNParams(_object, methodNumber);

            using (var variant = new NativeApiVariant(paramCount))
            {
                SetDefValues(methodNumber, paramCount, arguments);
                for (int i = 0; i < paramCount; i++)
                {
                    variant.Assign(arguments[i], i);
                }

                NativeApiProxy.CallAsProc(_object, methodNumber, variant.Ptr);
            }
        }
        public void CallAsProcedure(int methodNumber, IValue[] arguments)
        {
            var paramArray = IntPtr.Zero;
            int paramCount = NativeApiProxy.GetNParams(_object, methodNumber);

            if (paramCount > 0)
            {
                paramArray = Marshal.AllocHGlobal(NativeApiVariant.Size * paramCount);
            }
            SetDefValues(methodNumber, paramCount, arguments);
            NativeApiVariant.SetValue(paramArray, arguments, paramCount);
            NativeApiProxy.CallAsProc(_object, methodNumber, paramArray);
            NativeApiVariant.GetValue(arguments, paramArray, paramCount);
            NativeApiVariant.Clear(paramArray, paramCount);
            Marshal.FreeHGlobal(paramArray);
        }
Beispiel #13
0
        public static IValue Value(IntPtr variant, Int32 number = 0)
        {
            IValue value = ValueFactory.Create();

            NativeApiProxy.GetVariant(variant, number,
                                      (v, n) => value       = ValueFactory.Create(),
                                      (v, n, r) => value    = ValueFactory.Create(r),
                                      (v, n, r) => value    = ValueFactory.Create((Decimal)r),
                                      (v, n, r) => value    = ValueFactory.Create((Decimal)r),
                                      (v, n, r, s) => value = ValueFactory.Create(Marshal.PtrToStringUni(r, s)),
                                      (v, n, r, s) => {
                byte[] buffer = new byte[s];
                Marshal.Copy(r, buffer, 0, s);
                value = ValueFactory.Create(new BinaryDataContext(buffer));
            }
                                      );
            return(value);
        }
Beispiel #14
0
        public void CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
        {
            var result     = ValueFactory.Create();
            int paramCount = NativeApiProxy.GetNParams(_object, methodNumber);

            using (var variant = new NativeApiVariant(paramCount))
            {
                SetDefValues(methodNumber, paramCount, arguments);
                for (int i = 0; i < paramCount; i++)
                {
                    variant.Assign(arguments[i], i);
                }

                NativeApiProxy.CallAsFunc(_object, methodNumber, variant.Ptr,
                                          res => result = NativeApiVariant.Value(res)
                                          );
            }
            retValue = result;
        }
        public MethodInfo GetMethodInfo(int methodNumber)
        {
            if (methodNumber < 0)
            {
                throw new RuntimeException("Метод не найден");
            }
            var name  = String.Empty;
            var alias = String.Empty;

            NativeApiProxy.GetMethodName(_object, methodNumber, 0,
                                         str => name = NativeApiProxy.Str(str)
                                         );
            NativeApiProxy.GetMethodName(_object, methodNumber, 1,
                                         str => alias = NativeApiProxy.Str(str)
                                         );
            var paramCount = NativeApiProxy.GetNParams(_object, methodNumber);
            var paramArray = new ParameterDefinition[paramCount];

            for (int i = 0; i < paramCount; i++)
            {
                NativeApiProxy.GetParamDefValue(_object, methodNumber, i, variant =>
                {
                    if (NativeApiVariant.NotEmpty(variant))
                    {
                        paramArray[i].HasDefaultValue   = true;
                        paramArray[i].DefaultValueIndex = ParameterDefinition.UNDEFINED_VALUE_INDEX;
                    }
                });
            }

            return(new MethodInfo
            {
                Name = name,
                Alias = alias,
                IsFunction = NativeApiProxy.HasRetVal(_object, methodNumber),
                IsDeprecated = false,
                IsExport = false,
                ThrowOnUseDeprecated = false,
                Params = paramArray,
            });
        }
        public void CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue)
        {
            var paramArray = IntPtr.Zero;
            int paramCount = NativeApiProxy.GetNParams(_object, methodNumber);

            if (paramCount > 0)
            {
                paramArray = Marshal.AllocHGlobal(NativeApiVariant.Size * paramCount);
            }
            SetDefValues(methodNumber, paramCount, arguments);
            NativeApiVariant.SetValue(paramArray, arguments, paramCount);
            IValue result = retValue = ValueFactory.Create();
            bool   ok     = NativeApiProxy.CallAsFunc(_object, methodNumber, paramArray,
                                                      variant => result = NativeApiVariant.GetValue(variant)
                                                      );

            NativeApiVariant.GetValue(arguments, paramArray, paramCount);
            NativeApiVariant.Clear(paramArray, paramCount);
            Marshal.FreeHGlobal(paramArray);
            if (ok)
            {
                retValue = result;
            }
        }
 public bool IsPropWritable(int propNum)
 {
     return(NativeApiProxy.IsPropWritable(_object, propNum));
 }
Beispiel #18
0
 public NativeApiVariant(Int32 count = 1)
 {
     variant = NativeApiProxy.CreateVariant(count);
 }
 public void Dispose()
 {
     try { NativeApiProxy.DestroyObject(_object); } catch (Exception) { }
 }
 private String S(IntPtr ptr)
 {
     return(NativeApiProxy.Str(ptr));
 }
 public int GetMethodsCount()
 {
     return(NativeApiProxy.GetNMethods(_object));
 }
 public int GetPropCount()
 {
     return(NativeApiProxy.GetNProps(_object));
 }