将ctypes与typedef一起使用

时间:2014-10-07 15:54:48

标签: python c typedef ctypes

我想调用C函数

void initialize(My_Session* session, My_Status* status);

来自Python使用ctypes。数据类型由

定义
typedef uint32_t My_Session;
typedef int32_t My_Status;

现在我想知道如何使用ctypes传递参数。我是否使用c_uint32c_int32,或者我必须定义类似于结构的类吗?

1 个答案:

答案 0 :(得分:1)

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整数。然后以Python整数形式返回sessionstatus

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