我有一个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
%{
...
%}
答案 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
}
%}