【发布时间】:2021-12-30 16:56:37
【问题描述】:
我正在从 python 调用 c++ 代码,我想知道为什么我没有从返回 int 的函数返回整数值。我一直在 python 中得到 None。
这是我的 C++ 代码:
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <chrono>
#include <iostream>
#include <thread>
#include <unistd.h>
using namespace std;
class Ultrasonic {
public:
int returnDistance() {
int fd;
fd=wiringPiI2CSetup(0x70) ;//i2c addres
//unsigned char arr[2]={00,0x51};//register port and command
int data;
wiringPiI2CWriteReg8(fd,00, 81);
sleep(1);
data = wiringPiI2CReadReg8(fd,3);
cout << "datatype of data is: " << typeid(data).name() << endl;
return data;
}
};
int main(){
Ultrasonic ultrasonic;
ultrasonic.returnDistance();
return 0;
}
extern "C" {
Ultrasonic* Ultrasonic_new(){ return new Ultrasonic(); }
int Ultrasonic_returnDistance(Ultrasonic* ultrasonic){ return ultrasonic -> returnDistance(); }
}
这是我的python代码:
# import the modules
from base64 import encode
from ctypes import cdll
import socket, time
lib3 = cdll.LoadLibrary('./libUltra.so')
class Ultrasonic(object):
# constructor
def __init__(self):
# attribute
self.obj = lib3.Ultrasonic_new()
def returnDistance(self):
lib3.Ultrasonic_returnDistance(self.obj)
ultra = Ultrasonic()
print(type(ultra))
print(type(ultra.returnDistance()))
这是我得到的输出:
数据的数据类型是:i(代表整数)
如果重要的话,我会使用这些命令:
g++ -c -fPIC ultra.cpp -o ultra.o -lwiringPi
g++ -shared -Wl,-soname,libUltra.so -o libUltra.so ultra.o -lwiringPi
【问题讨论】:
-
python 函数
returnDistance()不返回任何内容。 -
您的 Python 包装器中缺少返回值
-
@AndyG 是的,谢谢你现在也看到了!