C语言 如何在SWIG界面中只选择特定的定义?

nzrxty8p  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(134)

我有一个C头文件,里面有很多寄存器的定义,在Python SWIG接口中我只想公开一些。我的C头文件看起来像这样(只是有更多的定义):

#define REG_1 0x0001
#define REG_2 0x0002
#define REG_3 0x0003

比如说,在我生成的Python模块中,如果我想让所有的定义都可以访问,我可以这样做:

%module myheader
%{
#include myheader.h
%}

%include myheader.h

但是如果我只想让REG_1可访问/ Package 呢?我尝试了类似这样的方法:

%module myheader
%{
#include myheader.h
%}

%constant REG_1;

但是没有用。查了文档,还是毫无头绪。有什么想法吗?

uqdfh47h

uqdfh47h1#

我所知道的唯一方法是重复并准确地声明你想揭露的内容:

%module myheader
%{
#include myheader.h
%}

#define REG_1 0x0001
3pvhb19x

3pvhb19x2#

您可以使用SWIG的高级重命名支持来实现这一点。
给定演示头文件(defs.h):

#define WRAP_ME_1 1
#define WRAP_ME_2 2

#define IGNORE_ME_1 1
#define IGNORE_ME_2 2

一个界面写得像这样:

%module test

%ignore "";
%rename("%s", regexmatch$name="^WRAP_ME") "";
%include "defs.h"

将只 Package 以'WRAP_ME'开头的内容(通过正则表达式)。
同样地:

%module test

%rename("$ignore", regexmatch$name="^IGNORE_ME") "";    
%include "defs.h"

将 Package 所有以'IGNORE_ME'开头的项目以外的项目。
在链接的文档中,您可以使用一些类似的方法,但这是模式匹配选择性 Package 的一般要点。

相关问题