2015-11-06 3 views
0

У меня есть следующие lib.c:Изменение значения в общей библиотеке с ctypes

#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, изменить double хранится по адресу от fun().contents, например, 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() 

выход (примечание для функции C я использовал %p вместо %zd):

000007FEFAC14000 4.000000 
000007FEFAC14000 2.000000 
Смежные вопросы