我有一个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/