我有一个C ++ DLL,已经使用SWIG工具为其生成了C#代码。中间类在PINVOKE.cs文件中具有以下方法(假设模块名称为MyModule):
static MyModulePINVOKE()
{
...
}
我想执行模块初始化,可以使用%init%
关键字在SWIG中完成,但是该关键字不适用于C#。有关详细信息,请参见以下帖子。我按照文章中的说明进行操作,并且可以执行我想做的事情,但是我希望我的代码在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接口文件中使用以下代码添加自定义构造函数:
%pragma(csharp) imclasscode=%{
static $imclassname()
{
... // do something for initialization
}
%}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句