我正在尝试为将输入作为指针的旧 C 程序创建一个 Python 包装器。此时,我可以让程序运行,但不知道如何取回指定指针处的值。
这是一个简化的 C 脚本:
#include <stdlib.h>
void cprogram(double *wts, double *res, int *kks, int n, double *ex) {
int m;
m=n+1;
res[0]=1.0;
kks[0]=1.0;}
这是我简化的 Python 代码:
from ctypes import *
import sys
libc = CDLL("src/program.so")
class CONTEXT(Structure):
_fields_ = [
("wts", POINTER(c_double)), //tried just to see if it would work
("res", c_double),
("kks", c_int),
("n", c_int),
("ex", c_double)]
def runner():
kk = (1,2,3)
n = 3
mm = n + 1
wts = (c_double * n)(1, 1, 1)
res = (c_double * mm)(0)
kks = (c_int * len(kk))(*kk)
n = c_int(n)
ex = c_double(0)
libc.cprogram.restype = POINTER(CONTEXT)
tmp = libc.cprogram(wts, res, kks, n, ex)
runner()
我已经尝试过类似的命令print tmp[1].wts[1]
,print tmp[2]
但这只打印内存地址而不是值(或非常小的不正确的值,如 2.15880221124e-314)。我希望能够返回 wts 的值列表。