コード例 #1
0
ファイル: QObject.cs プロジェクト: joonhwan/QtSharp
        protected int HandleQtMetacall(int index, QMetaObject.Call call, void **arguments)
        {
            if (index < 0 || call != QMetaObject.Call.InvokeMetaMethod)
            {
                return(index);
            }
            Handler handler = this.slots[index];

            System.Reflection.ParameterInfo[] @params = handler.Delegate.Method.GetParameters();
            object[] parameters = new object[@params.Length];
            for (int i = 0; i < @params.Length; i++)
            {
                System.Reflection.ParameterInfo parameter = @params[i];
                var    arg = new IntPtr(arguments[1 + i]);
                object value;
                if (parameter.ParameterType.IsValueType)
                {
                    value = Marshal.PtrToStructure(arg, parameter.ParameterType);
                }
                else
                {
                    if (parameter.ParameterType.IsAssignableFrom(typeof(string)))
                    {
                        var metaMethod = this.Sender.MetaObject.Method(handler.SignalId);
                        if (metaMethod.ParameterType(i) == (int)QMetaType.Type.QString)
                        {
                            value = Marshal.PtrToStringUni(new IntPtr(new QString(arg).Utf16));
                        }
                        else
                        {
                            value = Marshal.PtrToStringUni(arg);
                        }
                    }
                    else
                    {
                        value = Activator.CreateInstance(parameter.ParameterType, arg);
                    }
                }
                parameters[i] = value;
            }
            handler.Delegate.DynamicInvoke(parameters);
            return(-1);
        }
コード例 #2
0
        protected int HandleQtMetacall(int index, QMetaObject.Call call, void **arguments)
        {
            if (index < 0 || call != QMetaObject.Call.InvokeMetaMethod)
            {
                return(index);
            }
            Handler handler = this.slots[index];

            System.Reflection.ParameterInfo[] @params = handler.Delegate.Method.GetParameters();
            object[] parameters = new object[@params.Length];
            for (int i = 0; i < @params.Length; i++)
            {
                System.Reflection.ParameterInfo parameter = @params[i];
                var arg = new IntPtr(arguments[1 + i]);
                parameters[i] = GetParameterValue(handler, i, parameter, arg);
            }
            handler.Delegate.DynamicInvoke(parameters);
            return(-1);
        }