我正在使用SWIG和目标Python从嵌入式系统中包装一些C代码进行试验。这是一个简单的代码,我已经删除了硬件,一切都编译得很好。
我遇到的问题是,我感兴趣的功能是在一个静态的全球环境中运作的。在C文件顶部定义的变量。我无法弄清楚如何让模块实例化这个变量并由包装函数操作。
我制作了一些简单的测试文件,如果我在模块中声明全局变量,它会出现在cvar中,但是一个应该在其体内修改此变量的函数对cvar实例没有影响。
有没有办法让这项工作,而不修改我正在包装的C源文件?
答案 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来访问它。