我想调用一个C函数
void initialize(My_Session* session, My_Status* status);
使用 ctypes 来自 Python。数据类型定义为
typedef uint32_t My_Session;
typedef int32_t My_Status;
现在我想知道如何使用 ctypes 传递参数。我是使用 c_uint32
和 c_int32
,还是必须像定义结构一样定义一个类?
最佳答案
eryksun 的评论让我步入正轨。
在 python 文件中我必须定义:
from ctypes import *
_libtest = CDLL('libTest')
_libtest.initialize.argtypes = [POINTER(c_uint32), POINTER(c_int32)]
_libtest.initialize.restype = None
def initialize(session,status):
return _libtest.initialize(byref(session),byref(status))
if __name__ == '__main__':
session = c_uint32();
status = c_int32();
initialize(session, status)
print status
C 库的名称必须是 libTest.dll。
或者,定义 initialize
来创建 ctypes 整数。然后将 session
和 status
作为 Python 整数返回:
def initialize():
session = c_uint32()
status = c_int32()
_libtest.initialize(byref(session), byref(status))
return session.value, status.value
if __name__ == '__main__':
session, status = initialize()
print 'session:', session
print 'status:', status
关于python - 将 ctypes 与 typedef 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26240202/