示例#1
0
        /// <summary>関数を登録します。</summary>
        /// <param name="signature">関数のフルシグネチャ</param>
        /// <param name="method">実際の関数</param>
        public void AdvertiseMethod(string signature, QiObjectMethod method)
        {
            var  qiMethod = new QiMethod(method);
            uint id       = QiApiObjectBuilder.AdvertiseMethod(
                this, signature, qiMethod.UnmanagedMethod, IntPtr.Zero
                );

            _advertisedMethods[id] = qiMethod;
        }
 /// <summary>関数を登録します。</summary>
 /// <param name="signature">関数のフルシグネチャ</param>
 /// <param name="method">実際の関数</param>
 public void AdvertiseMethod(string signature, QiObjectMethod method)
 {
     var qiMethod = new QiMethod(method);
     uint id = QiApiObjectBuilder.AdvertiseMethod(
         this, signature, qiMethod.UnmanagedMethod, IntPtr.Zero
         );
     
     _advertisedMethods[id] = qiMethod;
 }
示例#3
0
 public QiMethod(QiObjectMethod method)
 {
     ManagedMethod   = method;
     UnmanagedMethod = (sig, args, ret, _) =>
     {
         var result   = ManagedMethod(sig, new QiValue(args));
         var retValue = new QiValue(ret);
         //すり替え処理によって計算結果を渡したい
         //(というかC言語APIだと他に良い手が無さそうに見える)
         QiValue.Swap(retValue, result);
     };
 }
示例#4
0
        /// <summary>関数を登録します。</summary>
        /// <param name="methodName">関数の名前</param>
        /// <param name="returns">返却する値の型</param>
        /// <param name="args">引数の型一覧</param>
        /// <param name="method">メソッドの実装</param>
        public void AdvertiseMethod(
            string methodName,
            QiMethodSignature returns,
            IEnumerable <QiMethodSignature> args,
            QiObjectMethod method
            )
        {
            string signature = methodName +
                               QiSignatures.MethodNameSuffix +
                               returns.Signature +
                               QiMethodSignature.TupleOf(args).Signature;

            AdvertiseMethod(signature, method);
        }
        /// <summary>関数を登録します。</summary>
        /// <param name="methodName">関数の名前</param>
        /// <param name="returns">返却する値の型</param>
        /// <param name="args">引数の型一覧</param>
        /// <param name="method">メソッドの実装</param>
        public void AdvertiseMethod(
            string methodName,
            QiMethodSignature returns,
            IEnumerable<QiMethodSignature> args,
            QiObjectMethod method
            )
        {
            string signature = methodName +
                QiSignatures.MethodNameSuffix +
                returns.Signature +
                QiMethodSignature.TupleOf(args).Signature;

            AdvertiseMethod(signature, method);
        }
 public QiMethod(QiObjectMethod method)
 {
     ManagedMethod = method;
     UnmanagedMethod = (sig, args, ret, _) =>
     {
         var result = ManagedMethod(sig, new QiValue(args));
         var retValue = new QiValue(ret);
         //すり替え処理によって計算結果を渡したい
         //(というかC言語APIだと他に良い手が無さそうに見える)
         QiValue.Swap(retValue, result);
     };
 }