将C结构传递给Python函数

我需要一种简单的方法将C结构传递给Python函数。 我已经将Python嵌入到游戏服务器中,我打算用Python编写游戏逻辑。 我搜索了谷歌和邮件列表,没有发现任何有用的东西。 我在C中有一个复杂的结构(指向其他相对复杂的结构)并且没有找到合理的方法。

我有这个结构:

struct client { int state; int sockfd; struct sockaddr_in *addr; struct epoll_event *epollev; struct buffer *in_buffer; struct buffer *out_buffer; struct packet *packet; struct player *player; }; 

并且需要将它传递给Python函数,在那里我可以使用通用语法轻松访问成员(最好不要使用像dicts这样的东西,尽管那也没关系)。 这几乎就像我需要一个PyObject_FromStruct函数。

有没有相对简单的方法来做到这一点?

我认为最简单的方法可能是为结构中的每个元素编写get()/ set()函数(例如:获取地址值的get_addr())然后:

选项1(我认为这是最简单的):将你的c代码编译为带有get / set导出的dll文件并将其加载到python中以调用“get”函数( 在这里查看我的post,在python中使用dll,这个Q&A可能很有用在linux中使用.so文件

选项2:您可以使用SWIG获取pyd文件并将其导入python以调用“get / set”函数

使用这种方式python只处理指针NOT指针,不涉及任何内存地址使用。

SWIG可以做指针,特别是如果你可以在Python代码中将它们视为不透明的blob。

您可能也会使用Cython – 它是Python的一种方言,允许您混合使用Python和C数据类型。

你最好的选择是像swig ,但我认为指针会给你带来麻烦。

我将结构包装在python可以使用boost :: python消化的东西中。 然后访问要导出到python的function。