Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        上个月关闭。
                                                                                            
                
        
我有一个C扩展名,我通过ctypes在python中调用。
C代码如下所示:

double new(int t){
   double sum;
   sum = (double)t*(double)1.5;
   return sum;
}


这样的Python代码:

import ctypes
fun = ctypes.CDLL("C:/test.so")
fun.new.argtypes = [ctypes.c_int]
fun.new.restypes = ctypes.c_double
fun.new(2)


因此,人们期望输出为“ 3.0”,但我得到的输出为“ -1398886288”。
我将其分解为一个简单的示例。我的实际应用程序要大得多,但在那里我也得到了一些奇怪的输出。也许我对ctypes有误吗?

最佳答案

它的拼写是restype,而不是restypes

fun.new.restype = ctypes.c_double


进行此更改后,代码“有效”。但是它不会计算“和”,而是缩放一个数字。它还包含不必要的强制转换,并且不必要地拆分了声明和初始化。

通常,以下是实现此功能的首选方法:

double three_halves(int x) {
    double result = x * 1.5;
    return result;
}


或者,如果实际上是此功能的全部内容,请省略不必要的中间变量:

double three_halves(int x) {
    return x * 1.5;
}

关于python - 使用C和ctypes计算的怪异行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59682904/

10-13 02:52