【问题标题】:python dll return value is wrongpython dll返回值错误
【发布时间】:2013-08-26 08:49:01
【问题描述】:

我已经制作了一个包含代码的dll:

#pragma once

extern double __declspec(dllexport) add(double a, double b);
extern double __declspec(dllexport) dif(double a, double b);

#include "testdll.h"

double add(double a, double b)
{
    return a + b;
}

double dif(double a, double b)
{
    return a - b;
} 

调用add函数的python代码:

    a = ctypes.c_double(1);
    b = ctypes.c_double(2);
    mydll = ctypes.CDLL('testDll.dll');
    mydll.restype = ctypes.c_double;
    ret  = mydll.AddNumbers(a, b);

问题是 add 函数不返回 a+b 而是一个搞砸的值:2619340

请帮忙

【问题讨论】:

  • 奇怪的是它适用于整数。只有双打才是问题...
  • - 更改代码不使用 python 函数来获取结果。结果还是错了。

标签: python dll ctypes


【解决方案1】:

返回类型是double,所以你应该像这样设置restype

hllDll.add.restype = ctypes.c_double
hllDll.add.argtypes = [ctypes.c_double, ctypes.c_double]

【讨论】:

    【解决方案2】:
    a = ctypes.c_double(1);
    b = ctypes.c_double(2);
    mydll = ctypes.CDLL('testDll.dll');
    mydll.AddNumbers.restype = ctypes.c_double;
    ret  = mydll.AddNumbers(a, b);
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2014-12-03
    • 2011-02-13
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多