Python ctypes调用在64位模式下修改了我的指针值

时间:2014-06-18 03:50:00

标签: python c windows ctypes

我有一个C方法,我试图从Python调用

OVR_EXPORT void ovrHmd_EndEyeRender(ovrHmd hmd, ovrEyeType eye,
                                    ovrPosef renderPose, ovrTexture* eyeTexture)

在python方面,它声明如下:

for _lib in _libs.itervalues():
  if not hasattr(_lib, 'ovrHmd_EndEyeRender'):
    continue
  ovrHmd_EndEyeRender = _lib.ovrHmd_EndEyeRender
  ovrHmd_EndEyeRender.argtypes = [hmd, ovrEyeType, pose, POINTER(texture)]
  ovrHmd_EndEyeRender.restype = None
  break

我这样称呼它:

ovrHmd_EndEyeRender(self.hmd, eye, p, pointer(t))

然而,它没有达到预期的效果。在Python和C中我添加了一些调试日志记录:

的Python:

print 'address:', ctypes.addressof(t), type(t)

C:

OVR_DEBUG_LOG(("addressof texture: %d", eyeTexture));

在我的控制台输出中,我得到了不同的值:

address: 48163936 <class 'oculusvr.struct_ovrTexture_'>
Debug: addressof texture: 488341928

通过指针传递值的其他包装函数似乎工作正常。此外,问题似乎只发生在我的Windows环境中。在Linux中,应用程序可以运行。

任何人都知道会出现什么问题?

0 个答案:

没有答案