Python2.7到3.5:ctypes改变了什么?

Python2.7到3.5:ctypes改变了什么?,c,python-3.x,C,Python 3.x,以下小程序正在调用C库: from ctypes import * ini_file="/home/pi/pyYASDI/yasdi.ini" yasdiMaster_lib="/usr/local/lib/libyasdimaster.so" masterlib = cdll.LoadLibrary(yasdiMaster_lib) DriverCount=c_ulong(10) pDriverCount=byref(DriverCount) print("Init: ",master

以下小程序正在调用C库:

from ctypes import * 

ini_file="/home/pi/pyYASDI/yasdi.ini"
yasdiMaster_lib="/usr/local/lib/libyasdimaster.so"

masterlib = cdll.LoadLibrary(yasdiMaster_lib)

DriverCount=c_ulong(10)
pDriverCount=byref(DriverCount)
print("Init: ",masterlib.yasdiMasterInitialize(ini_file,pDriverCount))

在Python2.7中,C lib调用工作正常,在Python3.5中,它返回一个不同的值。不幸的是,我无法调试C库。在这段小代码中,从2.7到3.5的变化是什么?将参数移交给C库会有变化吗?
yasdiMasterInitialize
调用的参数是
char*cIniFileName,DWORD*pDriverCount)

谢谢你的提示!这是Python 3.5的Unicode更改!我现在只换了一行:

ini_file="/home/pi/pyYASDI/yasdi.ini".encode('ascii')

您是指
yasdiMasterInitialize
的返回值还是写入
pDriverCount
的值?这两个价值观是什么?您希望得到哪一个值?最后一行中的
yasdiMasterInitialize
调用在2.7中返回0,但在3.5中返回-1。lib调用实际上在做什么并不重要——问题是它为什么不同?在C中,返回值0通常表示“成功”和-1“失败”。您应该查阅
yasdiMasterInitialize
的文档,以确定并获取有关失败原因的提示。我使用相同的调用和参数调用相同的C库。但有些东西必须有所不同,因为yasdiMasterInitialize在3.5中不起作用。
yasdiMasterInitialize
的参数是
(char*cIniFileName,DWORD*pDriverCount)
可能区别在于Python 2和3中字符串的处理方式,请参见