如何更改 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
}
%}
我有一个 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
}
%}