Swig csclassmodifiers 不适用于 C 函数的 Module 类

Posted

技术标签:

【中文标题】Swig csclassmodifiers 不适用于 C 函数的 Module 类【英文标题】:Swig csclassmodifiers does not work on Module class for C functions 【发布时间】:2016-10-26 16:09:36 【问题描述】:

我正在尝试围绕TA-Lib(一个流行的开源技术指标库)生成一个 C# SWIG 包装器。

TA-Lib 代码是 C 代码(extern "C" 函数的集合),因此,Swig 会生成这样的类:

// where ModuleName is specified as %module "ModuleName"
// where SomeCFunc is an extern "C" function in the target C dll
public class ModuleName  
    public void SomeCFunc(...)

但是。我需要将我的类 ModuleName 定义为 public unsafe partial。过去我使用过csclassmodifiers,例如

%typemap(csclassmodifiers) ModuleName "public unsafe partial class"

这应该将类生成为public unsafe partial,但在这种情况下它不起作用,因为该类是根据模块名称生成的——我本身并没有包装 C++ 类。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我刚发帖,我就发现了如何做到这一点(尽管花了一天的时间!)#RubberDuckCoding

所以解决方案是在你的 *.i Swig 接口文件中指定 moduleclassmodifiers

%pragma(csharp) moduleclassmodifiers="public unsafe partial class"

输出模块类现在生成为

// where ModuleName is specified as %module "ModuleName"
// where SomeCFunc is an extern "C" function in the target C dll
public unsafe partial class ModuleName  
    public void SomeCFunc(...)

【讨论】:

以上是关于Swig csclassmodifiers 不适用于 C 函数的 Module 类的主要内容,如果未能解决你的问题,请参考以下文章

swig 和使用 Visual Studio 2017 命令行构建项目

如何使用静态变量和自定义 getter 和 setter 在 SWIG 中扩展结构?

SWIG 不接受指针参数的包装对象

Python 抱怨 SWIG 模块不存在

swig/python:对象不支持索引

SWIG 不支持 include_next GNU 指令