繁体   English   中英

使用ctypes更改共享库中的值

[英]Change value in shared library with ctypes

我有以下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

以下将更改该值:

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()

输出(对于C函数,请注意,我使用%p代替%zd ):

000007FEFAC14000 4.000000
000007FEFAC14000 2.000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM