分配给通过Python CTypes从共享库导出的变量?

分配给通过Python CTypes从共享库导出的变量?,python,ctypes,Python,Ctypes,我有一个共享的liblibtest。因此由test.c生成: #include <stdio.h> int value; void fn() { printf("%d\n", value); } (我是从学校学到的。) 然而,如果我试图写信给同样的人,它会抱怨: In[3]: c_int.in_dll(lib, "value") = 2 File "<ipython-input-4-5a1e8ea6a1b4>", line 1 c_int.in_dll(li

我有一个共享的lib
libtest。因此
test.c
生成:

#include <stdio.h>
int value;
void fn() { printf("%d\n", value); }
(我是从学校学到的。)

然而,如果我试图写信给同样的人,它会抱怨:

In[3]: c_int.in_dll(lib, "value") = 2
  File "<ipython-input-4-5a1e8ea6a1b4>", line 1
    c_int.in_dll(lib, "value") = 2
                                  ^
SyntaxError: can't assign to function call
[3]中的
:c_int.In_dll(lib,“value”)=2
文件“”,第1行
c_int.in_dll(lib,“value”)=2
^
SyntaxError:无法分配给函数调用
这大概是因为c_int对象没有直接“指向”c内存位置

当然,我可以编写并导出一个
setValue
函数,该函数可以从Python接收数据,以便在C中修改
value
,但我想知道是否有什么方法可以不用它

似乎表明这是不可能的,但希望得到具体的答案,从而发布具体的问题。

您的
c_int
确实指向
test.c
值。您需要写入
c_int
属性,以写入
c_int
包装的底层内存。否则,您只需在pythonland中用另一个Python对象替换一个Python对象,而在C语言中则没有任何效果。例如:

>>> import ctypes
>>> i = ctypes.c_int()
>>> i
c_int(0)
>>> i.value = 10
>>> i
c_int(10)
>>> import ctypes
>>> i = ctypes.c_int()
>>> i
c_int(0)
>>> i.value = 10
>>> i
c_int(10)