python和ctypes cdll,未从函数中获得预期的返回

2024-05-16 07:53:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究触觉机器人和眼睛跟踪器的接口。所以,两者都有自己的编程需求,也就是说,眼球跟踪器软件是基于python的,是我编程的主要语言。我们的触觉机器人在C语言中有一个API,所以我不得不用C编写一个包装器,将其编译为DLL,并使用python中的cypes加载函数。在

我用MATLAB测试了我的DLL,一切正常。然而,我在python类中实现ctypes的一些问题在查询robot的位置坐标时没有给出预期的返回值。在

我将在这里发布代码,并在底部对问题进行更清楚的解释。在

DLL包装的C源代码:

#include <QHHeadersGLUT.h>
using namespace std;
class myHapClass{
public:
void InitOmni()
{
    DeviceSpace* Omni = new DeviceSpace; //Find a the default phantom
}
double GetCoord(int index)
{
    HDdouble hapPos[3];
    hdGetDoublev(HD_CURRENT_POSITION,hapPos);
    return hapPos[index];
}
};

extern "C" {
int index = 1;
__declspec(dllexport) myHapClass* myHap_new(){ return new myHapClass();}
__declspec(dllexport) void myHapInit(myHapClass* myHapObj){ myHapObj->InitOmni();}
__declspec(dllexport) double myHapCoord(myHapClass* myHapObj){ double nowCoord = myHapObj->GetCoord(index); return nowCoord;}
}

这个代码的理论是简单地有3个可用的C(非C++)调用,它们与Python/CyType兼容:

  1. myHap_new()返回指向类实例的指针
  2. myHapInit初始化触觉设备
  3. myHapCoord为int Index引用的轴的当前位置返回一个双精度值。在

python类如下:

^{pr2}$

python自定义类的原理是实例化一个对象(self.pyMyHapObj自己=pyMyHap())的值。调用函数“initOmni”成功初始化robot,但是调用“getCoord”不会返回预期值。实际上,我从'getCoord'得到的结果是1(它被列为1,而不是1.0,所以我认为它返回的是一个整数,而不是应该返回的双精度值)。在

在MATLAB中,我使用了DLL库,myHapInit和myHapCoord函数都可以正常工作,并且可以成功地初始化机器人和查询位置坐标。在

那么,我的python类是什么导致ctypes没有从myHapCoord从我的DLL中返回正确的值呢?在

任何帮助都将不胜感激。 谢谢

编辑:Python2.3版,如果重要的话。。。我坚持这个版本。在


Tags: newindexreturn机器人intdlldouble触觉