使用静态全局变量的SWIG包装C代码

时间:2016-05-19 20:03:14

标签: python c embedded global-variables swig

我正在使用SWIG和目标Python从嵌入式系统中包装一些C代码进行试验。这是一个简单的代码,我已经删除了硬件,一切都编译得很好。

我遇到的问题是,我感兴趣的功能是在一个静态的全球环境中运作的。在C文件顶部定义的变量。我无法弄清楚如何让模块实例化这个变量并由包装函数操作。

我制作了一些简单的测试文件,如果我在模块中声明全局变量,它会出现在cvar中,但是一个应该在其体内修改此变量的函数对cvar实例没有影响。

有没有办法让这项工作,而不修改我正在包装的C源文件?

1 个答案:

答案 0 :(得分:3)

这有效

如果你在标题中声明了常量extern,它可以正常工作。

标题

/* test.h */
extern float g_float;
float getMe();

来源

/* test.cpp */
#include "test.h"
float g_float = 4.0;
float getMe() {
  return g_float;
}   

接口定义文件

/* test.i */
%module test
%{
#include "test.h"
%}

%include "test.h"

使用

修改变量
import test
test.cvar.g_float = 4.5
test.getMe()

如果在标题中声明并初始化了常量,则可以添加内联函数,以便在接口定义文件中设置/获取它们和属性。

静态类变量也可以,但可以使用类而不是cvar来访问它。