gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:11 25 4
gpt4 key购买 nike

我正在包装来自嵌入式系统的一些 C 代码以进行实验,使用 SWIG 并以 Python 为目标。这是简单的代码,我已经删除了硬件,一切都可以正常编译。

我遇到的问题是我感兴趣的函数在 C 文件顶部定义的静态全局“上下文”变量上运行。我无法弄清楚如何让模块实例化此变量并由包装函数对其进行操作。

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

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

最佳答案

这行得通

如果您在 header 中声明常量 extern,则它可以正常工作。

标题

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

来源

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

接口(interface)定义文件

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

%include "test.h"

使用修改变量

import test
test.cvar.g_float = 4.5
test.getMe()

如果您在 header 中声明并初始化了常量,则可以在接口(interface)定义文件中添加用于设置/获取它们和属性的内联函数。

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

关于python - 用使用静态全局变量的 SWIG 包装 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37332977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com