簡體   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