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

Python 使用使用静态全局变量的SWIG包装C代码,python,c,embedded,global-variables,swig,Python,C,Embedded,Global Variables,Swig,我正在包装一些来自嵌入式系统的C代码,用于实验,使用SWIG和Python。这是简单的代码,我已经去掉了硬件,一切都很好 我遇到的问题是,我感兴趣的函数操作在C文件顶部定义的静态全局“上下文”变量上。我不知道如何让这个变量由模块实例化并由包装函数操作 我制作了一些简单的测试文件,如果我在模块中声明了全局变量,它就会出现在cvar中,但是一个应该在其主体中修改该变量的函数对cvar实例没有影响 在不修改我正在包装的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来访问它。

如果您这样更改它,它对我来说是有效的
somelib.cvar.somevar=4.0
。对不起,你说得对。也不为我工作。您可以在swig.i文件中内联代码来设置变量,但这不是很优雅谢谢,这很有效。事实证明,我正在包装的代码使用了一个静态上下文变量,我不能直接访问它,但它只包含指向更大结构的成员的指针,我用extern声明了这个结构,现在我可以通过cvar访问上下文,并在其上调用包装的函数。