2

A と B という 2 つのネイティブ c++ dll があります。クラス X は A.dll にあり、クラス Y は B.dll にあり、shared_ptr<X>. X をインスタンス化し、C# アプリ内でこのインターフェイスを使用して Y に渡したいと思います。

これら 2 つのタイプは異なる dll に存在するためswig -dllimport A -c++ -csharp A.i、 とを使用して別々にビルドしますswig -dllimport B -c++ -csharp B.i。Ai 内で、%shared_ptr(X)マクロを使用して、必要なすべてのインターフェイスで型 X のオブジェクトを流動的に使用できるようにしましたshared_ptr<X>(これらのインターフェイスが A.dll にある場合)。

私の問題は、B.dll のクラス Y がそのshared_ptr<X>インターフェイスでを取得するとどうなるかということです。shared_ptr<X>(A.dll に存在する) Bi を使用して、その 2 番目の swig ビルドを作成するにはどうすればよいですか?

4

1 に答える 1

4

あなたが探しているの%importは SWIG です。これは、たとえばモジュール test1 で次のように使用できます。

%module test1

%include <std_shared_ptr.i>

%shared_ptr(Foo);

%inline %{
  struct Foo {};
  std::shared_ptr<Foo> foo() {
    return std::make_shared<Foo>();
  }
%}

これは、別のモジュール test2 から参照できます。

%module test2

%import "test1.i"

%inline %{
  void bar(std::shared_ptr<Foo>) {
  }
%}

(一言で言えば)何をするかと%importいうと、インターフェイスを読み取ることですが、そのためのラッパー コードを生成することはありません。つまり、その内容を認識しますが、そのためラッパーに直接出力することはありません。

于 2012-12-06T20:34:33.360 に答える