繁体   English   中英

从python调用c函数

[英]call c function from 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函数。 我该怎么做? 有关结构数组的问题。

谢谢

您将需要将c代码编译为共享库,然后使用“ ctypes” python模块与该库进行交互。
我建议你从这里开始

这也可能有用:“从C或C ++扩展Python”,从一个简单的示例开始。 你可以在这里找到更多关于它的信息

您首先需要使用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM