Я разрабатываю модуль для использования c inline
в коде Python на основе swig
. Для этого я хотел бы сделать numpy
массивов, доступных в C
. До сих пор я использовал типы C, такие как unsigned short
, но я хотел бы использовать такие типы, как uint16_t
от stdint.h
, чтобы сохранить любой компилятор моего модуля.с использованием stdint с swig и numpy.i
К сожалению, функции c++
не обертываются правильно при использовании типов stdint.h
. Указанная ошибка: _setc() takes exactly 2 arguments (1 given)
. Это означает, что функция не завернута для приема массивов numpy
. Ошибка не возникает, когда я использую, например, unsigned short
.
Есть ли у вас какие-либо идеи, как я могу сделать карту swig numpy
массивов в stdint-types
?
interface.i
НЕ работает:
/* interface.i */
extern int __g();
%}
%include "stdint.i"
%include "numpy.i"
%init %{
import_array();
%}
%apply (uint16_t* INPLACE_ARRAY3, int DIM1) {(uint16_t* seq, int n1)};
extern int __g();
c++
функция не работает:
#include "Python.h"
#include <stdio.h>
#include <stdint.h>
extern uint16_t* c;
extern int Dc;
extern int Nc[4];
void _setc(uint16_t *seq, int n1, int n2, int n3)
{
c = seq;
Nc[0] = n1;
Nc[1] = n2;
Nc[2] = n3;
}
interface.i
рабочий:
/* interface.i */
extern int __g();
%}
%include "stdint.i"
%include "numpy.i"
%init %{
import_array();
%}
%apply (unsigned short* INPLACE_ARRAY3, int DIM1) {(unsigned short* seq, int n1)};
extern int __g();
c++
функция рабочего:
#include "Python.h"
#include <stdio.h>
#include <stdint.h>
extern unsigned short* c;
extern int Dc;
extern int Nc[4];
void _setc(unsigned short *seq, int n1, int n2, int n3)
{
c = seq;
Nc[0] = n1;
Nc[1] = n2;
Nc[2] = n3;
}
Whoa +1. Я думаю, что правильное решение - подать отчет об ошибке, но я не знаю, упадет ли он на ловкие уши. я на самом деле в конечном итоге с помощью '' ' % применяются (неподписанные символ * IN_ARRAY1, внутр DIM1) {(uint8_t * buff_ptr, внутр buff_size)} ' '' – user87746