python - 将 ctypes 与 typedef 一起使用

标签 python c typedef ctypes

我想调用一个C函数

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

使用 ctypes 来自 Python。数据类型定义为

typedef uint32_t My_Session;
typedef int32_t My_Status;

现在我想知道如何使用 ctypes 传递参数。我是使用 c_uint32c_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 整数。然后将 sessionstatus 作为 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/

相关文章:

c - 将指针传递给 C 中的函数

c - UDP 接收错误 : Connection refused

c - 为什么要将空结构创建为新的 typedef 并将其用作指针类型?

python - 在 python 中过滤 CSV 文件

python - 我可以直接加载一个我想要的对象,跳过系列中的其他对象,用于 pickle 文件

Python:pytz 返回不可用的 __repr__()

python - 为什么 Python md5 在 FIPS 模式下可用?

c - 理解一些基本链表函数时遇到的问题

c++ - 这个c++ typedef有什么问题?

c - '!=' token 之前的预期表达式...我哪里错了?