コード例 #1
0
        public void SetPropValue(int propNum, IValue newVal)
        {
            var variant = new NativeApiVariant();

            variant.SetValue(newVal);
            NativeApiProxy.SetPropVal(_object, propNum, ref variant);
            variant.Clear();
        }
コード例 #2
0
 public void SetPropValue(int propNum, IValue value)
 {
     using (var variant = new NativeApiVariant())
     {
         variant.Assign(value);
         NativeApiProxy.SetPropVal(_object, propNum, variant.Ptr);
     };
 }
コード例 #3
0
        public IValue GetPropValue(int propNum)
        {
            var result = ValueFactory.Create();

            NativeApiProxy.GetPropVal(_object, propNum,
                                      variant => result = NativeApiVariant.GetValue(variant)
                                      );
            return(result);
        }
コード例 #4
0
 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)
                                             );
         }
     }
 }
コード例 #5
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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
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;
        }
コード例 #8
0
        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,
            });
        }
コード例 #9
0
        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;
            }
        }
コード例 #10
0
 public static extern void SetPropVal(IntPtr ptr, Int32 lPropNum, ref NativeApiVariant value);