课设写不完,要炸了… Windows UI 好难写,只好用 PyQt 解决… 怎么把 Python 和 C 模块连起来?就用 ctypes.
1. 简介
ctypes 是一个 Python 外部库。它提供 C 语言兼容的数据结构,而且我们可以通过它来调用 DLL 或共享库(shared library)的函数。
2. 快速上手
编写 mod.c:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<stdio.h> #include<string.h> #include<stdlib.h> intadd(int a, int b) { return a+b; } char *hello(char *name) { char *str; str = (char *)malloc(100); sprintf(str, "Hello, %s", name); return str; }
将 C 程序编译为共享库:gcc -fPIC -shared mod.c -o mod.so
编写 Python 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# coding: utf-8 from ctypes import * mod = CDLL("./mod.so") print(mod.add(1, 2)) # 3 hello = mod.hello hello.restype = c_char_p # Set response type, # otherwise an address(integer) will be returned world = create_string_buffer(b"World") res = hello(byref(world)) # Pass by pointer print(res)