从python调用c函数

时间:2012-06-16 16:44:57

标签: python

我的代码在c:

typedef struct {
int bottom;
int top;
int left;
int right;
} blur_rect;

int bitmapblur(
char* input,
char* output,
blur_rect* rects,
int count,
int blur_repetitions);

我需要使用python中的bitmapblur函数。 我是怎么做到的 关于结构数组的问题。

THX

3 个答案:

答案 0 :(得分:5)

您需要将您的c代码编译为共享库,然后使用'ctypes'python模块与库进行交互。
我建议你start here

答案 1 :(得分:0)

这对于:“使用C或C ++扩展Python”非常有用,从一个简单的例子开始。你可以找到更多相关信息here

答案 2 :(得分:0)

您首先需要使用ctypes。首先,构建一个结构:

import ctypes

class BlurRect(ctypes.Structure):
    """
    rectangular area to blur
    """
    _fields_ = [("bottom", ctypes.c_int),
                ("top", ctypes.c_int),
                ("left", ctypes.c_int),
                ("right", ctypes.c_int),
                ]

现在加载你的功能。你需要弄清楚最好的名字 共享库,然后加载它。你应该已经有了这个代码 实现为dll或.so并在ld路径中可用。

另一个棘手的问题是你的函数有一个“输出”参数,而且 函数有望在那里写出结果。你需要创建 为此缓冲。

ctypes代码看起来像这样:

blurlib = ctypes.cdll.LoadLibrary("libblur.so")
outbuf = ctypes.create_string_buffer(1024) # not sure how big you need this

inputStructs = [BlurRect(*x) for x in application_defined_data]

successFlag = blurlib.bitmapblur("input", 
    outbuf,
    inputStructs,
    count,
    reps)