我有一个C函数,用于读取二进制文件并返回一个动态大小的无符号整数数组(大小基于二进制文件中的元数据):
//example.c
#include <stdio.h>
#include <stdlib.h>
__declspec(dllexport)unsigned int *read_data(char *filename, size_t* array_size){
FILE *f = fopen(filename, "rb");
fread(array_size, sizeof(size_t), 1, f);
unsigned int *array = (unsigned int *)malloc(*array_size * sizeof(unsigned int));
fread(array, sizeof(unsigned int), *array_size, f);
fclose(f);
return array;
}
这个回答似乎表明了将从C创建的数组传递给Python的正确方式类似于这样:
# example_wrap.py
from ctypes import *
import os
os.add_dll_directory(os.getcwd())
indexer_dll = CDLL("example.dll")
def read_data(filename):
filename = bytes(filename, 'utf-8')
size = c_size_t()
ptr = indexer_dll.read_data(filename, byref(size))
return ptr[:size]
然而,当我运行Python包装器时,在ptr[:size]
处代码悄无声息地失败了,就好像我试图访问一个越界的数组一样,而且很可能是这样,但是正确的传递动态大小数组的方法是什么?
indexer_dll.read_index()
的定义在哪里? - Craig