使用 ctypes 更改共享库中的值
Posted
技术标签:
【中文标题】使用 ctypes 更改共享库中的值【英文标题】:Change value in shared library with ctypes 【发布时间】:2015-11-06 23:00:51 【问题描述】:我有以下lib.c
:
#include <stdio.h>
double var = 4;
double* fun()
printf("%zd %f\n", &var, var);
return &var;
还有以下main.py
:
import ctypes
lib = ctypes.cdll.LoadLibrary('lib.so')
fun = lib.fun
fun.restype = ctypes.POINTER(ctypes.c_double)
print ctypes.addressof(fun().contents)
我怎样才能在.py
里面,改变存储在fun().contents
地址的double
,例如,将var
设置为10.2
?
【问题讨论】:
【参考方案1】:以下将改变值:
import ctypes
lib = ctypes.cdll.LoadLibrary('x')
fun = lib.fun
fun.restype = ctypes.POINTER(ctypes.c_double)
v = fun()
v.contents.value = 2.0
v = fun()
输出(注意我使用%p
而不是%zd
的C函数):
000007FEFAC14000 4.000000
000007FEFAC14000 2.000000
【讨论】:
以上是关于使用 ctypes 更改共享库中的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Git proto 存储库中发布对共享 .proto 文件的更改?