다음과 같이 1 차원 배열을 파이썬에 전달할 수 있습니다. 그리고 cptypes, numpy를 사용하여 파이썬에 C++ 이중 포인터 배열을 전달할 수 있는지 궁금합니다.파이썬에 C++ 더블 포인터를 넘김
Test.cpp에 :
#include <stdio.h>
extern "C" void cfun(const void * indatav, int rowcount, int colcount, void * outdatav);
void cfun(const void * indatav, int rowcount, int colcount, void * outdatav) {
//void cfun(const double * indata, int rowcount, int colcount, double * outdata) {
const double * indata = (double *) indatav;
double * outdata = (double *) outdatav;
int i;
puts("Here we go!");
for (i = 0; i < rowcount * colcount; ++i) {
outdata[i] = indata[i] * 4;
}
puts("Done!");
}
test.py :
import numpy
import ctypes
indata = numpy.ones((5,6), dtype=numpy.double)
outdata = numpy.zeros((5,6), dtype=numpy.double)
lib = ctypes.cdll.LoadLibrary('./ctest.so')
fun = lib.cfun
# Here comes the fool part.
#fun(ctypes.c_void_p(indata.ctypes.data), ctypes.c_void_p(outdata.ctypes.data))
fun(ctypes.c_void_p(indata.ctypes.data), ctypes.c_int(5), ctypes.c_int(6),
ctypes.c_void_p(outdata.ctypes.data))
print 'indata: %s' % indata
print 'outdata: %s' % outdata
이 내가 해왔 던 해킹이지만, 단지 포인터를 통과하지 이유 긴 정수로? –
유형이 정수가 아니고 두 배가 될 수 있기 때문입니다. – wonjun
포인터는 항상 긴 정수로 나타낼 수 있습니다. 원하는 유형으로 다시 캐스트하십시오. –