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



我正在从嵌入式系统中包装一些C代码,用于实验,使用SWIG并针对Python。这是简单的代码,我已经存根了硬件,一切都编译得很好。

遇到的问题是,我感兴趣的函数在 C 文件顶部定义的静态全局"上下文"变量上运行。我不知道如何让这个变量由模块实例化并由包装的函数操作。

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

有没有办法在不修改我正在包装的 C 源文件的情况下完成这项工作?

这有效

如果您在标头中声明常量 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 访问的。

最新更新