2

我有 2 个原生 c++ dll,比如 A 和 B。X 类位于 A.dll 中,Y 类位于 B.dll 中,其接口需要shared_ptr<X>. 我想在 C# 应用程序中使用此接口实例化 X 并将其交给 Y。

因为这两种类型存在于不同的 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>在它的接口中使用 a 怎么办?我怎样才能让 Bi 知道shared_ptr<X>(它存在于 A.dll 中)的第二次痛饮构建?

4

1 回答 1

4

您正在寻找的是%importSWIG。您可以按如下方式使用它,例如与模块 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 回答