SWIG:如何为所有生成的C#方法添加指定的C#代码块

时间:2013-03-11 15:38:30

标签: c# c++ c swig

我正在使用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 来插入接口级代码,但我找不到任何关于我想要的东西。

2 个答案:

答案 0 :(得分:1)

我认为最接近你的是滥用%exception。每个函数代码插入一次,除了它在C ++端而不是C#端。但是,您可以使用C ++本机调用,因为您可以随时在C#中执行任何操作。您甚至可以安排C ++调用一些静态函数来执行您想要固定块执行的任何操作。

示例:

%module test

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

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

在每次函数调用之前,使用额外的C ++代码生成一个说唱歌手。

答案 1 :(得分:0)

1)使课程部分

%typemap(csclassmodifiers) MyClass "public partial class"

2)在%pragma(csharp)moduleimports中添加缺少的代码

%pragma(csharp) moduleimports= %{

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

%}