Python 将ctypes与typedef一起使用

Python 将ctypes与typedef一起使用,python,c,typedef,ctypes,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_uint32和c_int32,还是必须定义一个类,就像对结构所做的那样?来自eryksun的评论让我走上了正轨 在python文件中,我必须定义: fr

我想调用一个C函数

void initialize(My_Session* session, My_Status* status);
从Python使用ctypes。数据类型由

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整数。然后将
会话
状态
作为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

谢谢你,埃里克森!我根据你的建议换了东西。我遵循了这个例子,这就是为什么我开始使用numpy.ctypeslib。CDLL函数是否也能识别unix系统上的libTest.so?我在这里使用的是一个私有库。我只是想知道,当我在Linux中做类似的事情时,是否可以使用相同的函数。如果我做对了,在这种情况下我需要调用
CDLL('libtest.so')