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

static MyModulePINVOKE()
{
    ...
}

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

搜索并找到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不要在中介类中生成默认的静态构造函数。然后在SWIG接口(interface)文件中使用以下代码添加自定义构造函数:
%pragma(csharp) imclasscode=%{
    static $imclassname()
    {
      ... // do something for initialization
    }
%}

关于c# - 如何在SWIG生成的CSHARP文件中更改构造函数代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28718453/

10-15 11:48