使用ctypes将malloc的数组从C返回到Python

查尔斯·L。

我正在寻找使用一些C代码来返回未知大小的多个数组。因为有多个数组,所以我认为我需要使用传入的指针,而且我不确定如何将其与用于设置数组的malloc结合使用。

这是一些代表性的C代码:

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

//gcc -fPIC -shared -o array_test_c.so array_test_c.c

void return_array(int * outdata1v, int * outdata2v) {
    int i;
    int N = 10;
    int * mydatav2, * mydatav3;
    mydatav2 = (int *) malloc(sizeof(int) * N);
    mydatav3 = (int *) malloc(sizeof(int) * N);
    for (i = 0; i<N; i++){
        mydatav2[i] = i;
        mydatav3[i] = i*2;
    }

    //this doesn't work which makes sense
    outdata1v = mydatav2;
    outdata2v = mydatav3;
}

而且我正在尝试通过以下方式将其连接到Python(这不起作用):

import os
import ctypes


#for c interface
test_module = ctypes.cdll.LoadLibrary(
    os.path.join(os.path.dirname(__file__), './array_test_c.so'))

outdata1 = (ctypes.c_int * 0)()
outdata2 = (ctypes.c_int * 0)()
test_module.return_array(outdata1, outdata2)
outdata1 = (ctypes.c_int*10).from_address(ctypes.addressof(outdata1))
print "out", outdata1[-1], outdata1, outdata2

这是行不通的,而且我永远也无法打印20张。有任何想法吗?

FogleBird

测试

#include <stdlib.h>

#define N 10

void test(int *size, int **out1, int **out2) {
    int i;
    int *data1, *data2;
    data1 = (int *)malloc(sizeof(int) * N);
    data2 = (int *)malloc(sizeof(int) * N);
    for (i = 0; i < N; i++){
        data1[i] = i;
        data2[i] = i * 2;
    }
    *size = N;
    *out1 = data1;
    *out2 = data2;
}

test.py

from ctypes import CDLL, POINTER, c_int, byref

dll = CDLL('test.so')

data1 = POINTER(c_int)()
data2 = POINTER(c_int)()
size = c_int()

dll.test(byref(size), byref(data1), byref(data2))

for i in range(size.value):
    print i, data1[i], data2[i]

编辑:您应该考虑提供释放malloc数据的功能。这样就可以了,例如dll.cleanup(data1, data2)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 malloc 将 char** 返回到 ctypes

来自分类Dev

使用CTypes和Foreign将字符串从C库返回到OCaml

来自分类Dev

使用CTypes和Foreign将字符串从C库返回到OCaml

来自分类Dev

将python列表传递给使用ctypes返回数组数据的“c”DLL函数

来自分类Dev

使用BOOST.python从C ++将结构返回到Python

来自分类Dev

使用BOOST.python从C ++将结构返回到Python

来自分类Dev

python ctypes数组将无法正确返回

来自分类Dev

Python Ctypes:将返回的C数组转换为python列表,而没有numpy

来自分类Dev

将结构数组从c返回到c#

来自分类Dev

将int数组从C ++ .dll返回到C#

来自分类Dev

Python:将值读入空数组,然后返回到文件

来自分类Dev

将2D Cython指针返回到Python数组

来自分类Dev

C ++将结果从多个线程返回到数组

来自分类Dev

Rcpp:将C数组作为NumericMatrix返回到R

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

将char数组从C ++函数返回到tcl

来自分类Dev

将数组从C#COM库返回到VBA

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

将数组从 C++ 返回到 Rust FFI 中的 Rust

来自分类Dev

使用引用将文档返回到数组中

来自分类Dev

使用 Cython 将从 C 函数创建的二维数组返回到 Python

来自分类Dev

ctypes:公开 C 中 malloc 的结构数组

来自分类Dev

使用Ctypes从Python调用Fortran时返回数组

来自分类Dev

如何使用ctypes将列表列表的Python列表转换为C数组?

来自分类Dev

将foreach值从函数返回到数组

来自分类Dev

异步android将值返回到数组

来自分类Dev

将 ThreadPoolExecutor 返回到任务数组

来自分类Dev

如何将值返回到数组

来自分类Dev

将数组从 PHP 返回到 jQuery 从 Ajax

Related 相关文章

热门标签

归档