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

How do I change the constructor code in SWIG generated CSHARP file

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

static MyModulePINVOKE() 
{
    ...
}

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

Google 搜索并找到 csconstruct 关键字但不确定如何使用它。以下代码段没有给出预期的结果。任何想法这里可能有什么问题:

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

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

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

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

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