如何更改SWIG生成的CSHARP文件中的构造函数代码

时间:2015-02-25 11:58:16

标签: c# c++ constructor swig

我有一个C ++ DLL,我使用SWIG工具生成了C#代码。中间类在PINVOKE.cs文件中具有以下方法(假设模块名称为MyModule):

static MyModulePINVOKE() 
{
    ...
}

我想执行模块初始化,可以使用%init%关键字在SWIG中完成,但该关键字不适用于C#。 See the following post for details。我按照帖子中的说明操作并能够做我想要的但我希望我的代码在PINVOKE类构造函数中运行,所以我正在寻找一种方法将代码插入构造函数中。

用Google搜索并找到 csconstruct 关键字但不确定如何使用它。以下代码段未提供所需结果。任何想法在这里可能是错的:

%typemap(csconstruct, excode=SWIGEXCODE) SWIGTYPE
%{
    ...
%} 

1 个答案:

答案 0 :(得分:2)

行。解决方案是在SWIG命令行中定义 SWIG_CSHARP_NO_IMCLASS_STATIC_CONSTRUCTOR 预处理器:

SWIG.EXE -Wall -DSWIG_CSHARP_NO_IMCLASS_STATIC_CONSTRUCTOR -c++ -csharp ...  

这将告诉SWIG NOT在中间类中生成默认的静态构造函数。然后在SWIG接口文件中使用以下代码添加自定义构造函数:

%pragma(csharp) imclasscode=%{
    static $imclassname()
    {
      ... // do something for initialization
    }
%}