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