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.

}

.....

}

也就是说我想生成与类型映射无关的代码,或者异常,它只是几行代码(例如,上面的“将出现在我所有方法中的代码块。”)将被插入到所有生成的方法。

我知道 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++ 代码的 rapper。

于 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 回答