用使用静态全局变量的 SWIG 包装 C 代码
Wrapping C code with SWIG that uses static global variables
我正在使用 SWIG 和目标 Python 包装来自嵌入式系统的一些 C 代码以进行实验。这是简单的代码,我已经删除了硬件,一切都可以正常编译。
我 运行 遇到的问题是我感兴趣的函数在 C 文件顶部定义的静态全局 'context' 变量上运行。我无法弄清楚如何让模块实例化此变量并由包装函数对其进行操作。
我制作了一些简单的测试文件来玩,如果我在模块中声明全局变量,它会出现在 cvar 中,但是应该在其主体中修改此变量的函数对 cvar 实例没有影响.
有没有什么方法可以在不修改我正在包装的 C 源文件的情况下完成这项工作?
这个有效
如果您在 header 中声明常量 extern,它工作正常。
Header
/* 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()
如果您在 header 中声明并初始化了常量,则可以为 setting/getting 它们和接口定义文件中的属性添加内联函数。
静态 class 变量也可以工作,但这是使用 class 而不是 cvar 来访问的。
我正在使用 SWIG 和目标 Python 包装来自嵌入式系统的一些 C 代码以进行实验。这是简单的代码,我已经删除了硬件,一切都可以正常编译。
我 运行 遇到的问题是我感兴趣的函数在 C 文件顶部定义的静态全局 'context' 变量上运行。我无法弄清楚如何让模块实例化此变量并由包装函数对其进行操作。
我制作了一些简单的测试文件来玩,如果我在模块中声明全局变量,它会出现在 cvar 中,但是应该在其主体中修改此变量的函数对 cvar 实例没有影响.
有没有什么方法可以在不修改我正在包装的 C 源文件的情况下完成这项工作?
这个有效
如果您在 header 中声明常量 extern,它工作正常。
Header
/* 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()
如果您在 header 中声明并初始化了常量,则可以为 setting/getting 它们和接口定义文件中的属性添加内联函数。
静态 class 变量也可以工作,但这是使用 class 而不是 cvar 来访问的。