python ctypes实现api测试_python和ctypes cdll,没有得到预期的函数返回

我正在研究连接触觉机器人和眼动仪的过程.因此,两者都有自己的编程要求,即眼动仪软件基于python,是我编程的主要语言.我们的触觉机器人在C中有一个API,所以我必须在C中编写一个包装器,将其编译为DLL,并在python中使用ctypes来加载这些函数.

我用MATLAB测试了我的DLL,一切正常.但是,当我查询机器人的位置坐标时,我在python类中实现ctypes的事情并没有给我预期的返回值.

我将在这里发布代码,并在底部更清楚地解释问题.

DLL包装器的C源代码:

#include

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 / ctypes兼容:

> myHap_new()返回指向该类实例的指针

> myHapInit初始化触觉设备

> myHapCoord返回int index引用的轴的当前位置的double.

python类如下:

import sreb

from ctypes import cdll

lib = cdll.LoadLibrary('C:\Documents and Settings\EyeLink\My Documents\Visual Studio 2010\Projects\myHapDLLSolution\Debug\myHapDLL.dll')

class CustomClassTemplate(sreb.EBObject):

def __init__(self):

sreb.EBObject.__init__(self)

self.pyMyHapObj = pyMyHap()

self.coordval=2.0

def setCoordval(self,c):

self.coordval = c

pass

def getCoordval(self):

return self.coordval

def initOmni(self):

self.pyMyHapObj.pyHapInit()

pass

def getCoord(self):

self.coordval = self.pyMyHapObj.pyHapCoord()

return self.coordval

class pyMyHap(object):

def __init__(self):

self.obj = lib.myHap_new()

self.coord = 1.0

def pyHapInit(self):

lib.myHapInit(self.obj)

def pyHapCoord(self):

self.coord = lib.myHapCoord(self.obj)

return self.coord

python自定义类的理论是实例化加载的DLL类的对象(self.pyMyHapObj = pyMyHap()).调用函数’initOmni’会成功初始化机器人,但是对’getCoord’的调用不会返回预期值.事实上,我从’getCoord’得到的结果是1(它被列为1,而不是1.0,所以我认为它返回一个整数,而不是它应该的双倍).

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

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

任何帮助,将不胜感激.

谢谢

编辑:Python版本2.3,如果重要…我坚持使用该版本.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值