分配给通过Python CTypes从共享库导出的变量?
我有一个共享的lib分配给通过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
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)