/// <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; }
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); }; }
/// <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); }