c调用python获取返回值_从Python调用的C函数发出返回值

看似简单的问题我有困难.我需要从Python代码调用各种C函数.目前,我正试图通过ctypes来做到这一点.我遇到了一个简单的示例实现问题,我正在使用它来确保在更改大块现有代码之前一切都按预期工作.C函数采用一些参数,进行各种数学计算,然后返回一个double值.这是我用作测试的C文件.

#include "Python.h"

double eval(double* args, int length, double* rands, int randLength, int debug)

{

double val1 = args[0];

double val2 = rands[0];

double ret = val1 + val2;

return ret;

}

在我的实际测试功能中,我打印val1和val2以确保它们正在接收值.一切都很好.调用此函数的Python如下所示.

test = ctypes.CDLL("/home/mjjoyce/Dev/C2M2L/AquaticWavesModel.so")

rand = Random();

args = [2]

argsArr = (ctypes.c_double * len(args))()

argsArr[:] = args

argsRand = [rand.random()]

argsRandArr = (ctypes.c_double * len(argsRand))()

rgsRandArr[:] = argsRand

result = test.eval(argsArr, len(argsArr), argsRandArr, len(argsRandArr), 0)

print "result", result

当打印返回的结果时,它通常会转储一个大的负数.这是我的假设,我需要在Python处理该值之前进行一些转换,但是我无法找到适合我生活的答案.我一直在搜索,但我不确定我是否错过了明显的信息,或者搜索错误的信息.

此外,如果我将函数的返回类型更改为int,则计算结果正确并返回int并按预期打印.如果我将它设置为double,则C代码中的计算是正确的(我打印它们进行检查),但Python不喜欢返回的结果.

我缺少什么想法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值