2

SWIG を使用して、C API への C# バインディングを生成しています。理想的には、特定の型マップを経由せずに、生成されたすべての C# メソッドに固定コード ブロックを追加したいと考えています。

これは可能ですか?

アップデート:

例は次のようになります。

class MyClass {

.....

public void MyMethod()
{
    // A block of code that will appear in all my methods.

   // my working code 1.

}



public void MyMethod_2()
{
    // A block of code that will appear in all my methods.

   // my working code 2.

}

.....

}

つまり、typemap や例外に関係のないコードを生成したいということです。生成されたメソッド。

SWIG にはcsbodyなど、インターフェイス レベルのコードを挿入するための特別なコマンドがあることは知っていますが、必要なものは何も見つかりません。

4

2 に答える 2

1

これに最も近いのは虐待だと思います%exception。これは、C# 側ではなく C++ 側にあることを除いて、関数コードごとに挿入します。ただし、C++ ネイティブ呼び出しから C# で実行したいことはいつでも実行できるため、同等のものを作成できます。固定ブロックで実行したいことを何でも行う静的関数を C++ で呼び出すように調整することもできます。

例:

%module test

%exception {
  // Some magical code goes here
  $action
}

class MyClass {
public:
  void MyMethod();
  void MyMethod2();
};

すべての関数呼び出しの前に追加の C++ コードでラッパーを生成します。

于 2013-03-24T09:05:35.720 に答える
0

1) クラスを部分的にする

%typemap(csclassmodifiers) MyClass "public partial class"

2) %pragma(csharp) moduleimports に不足しているコードを追加

%pragma(csharp) moduleimports= %{

public partial class MyClass
{
    public void MyMethodN()
    {
    ...
    }
}

%}
于 2015-06-12T23:17:15.323 に答える