Обёртывание Swig C для PHP: ошибка типа в аргументе, ожидаемый SWIGTYPE_p_p_double - PullRequest
0 голосов
/ 12 апреля 2019

Я использую Swig, чтобы обернуть стороннюю библиотеку C и загрузить ее в качестве общего расширения PHP.

У меня возникают проблемы при вызове функции с упаковкой, ошибка:

Введите ошибку в аргументе 2 аргумента func_name.Ожидаемый SWIGTYPE_p_p_double в [...]

Я попытался прочитать связанные части документации Swig и столько примеров, сколько смог найти, но не зная, что CI все еще вызывает много сомнений.

Я хотел бы знать, как сопоставить типу php аргумент, объявленный как:

double const *const *inputs

У указанной функции есть эта подпись в заголовочном файле библиотеки ( library.h ):

int func_name(int size,
      double const *const *inputs,
      double const *options,
      double *const *outputs);

Интерфейс Swig ( library.i )

%module module_name

%include "carrays.i"
%array_functions(double, doubleArray);

%{
    #include "library.h"
%}

%include "library.h"

Я вижу, что Swig определилв сгенерированном файле library_wrap.c тип, указанный в сообщении об ошибке:

/* -------- TYPES TABLE (BEGIN) -------- */
[...]
#define SWIGTYPE_p_p_double swig_types[6]
[...]

Если этих частей недостаточно, я могу точно предоставить шагичтобы воспроизвести это.

Я не делаю это сразу, потому что я почти уверен, что проблема только в моем непонимании, поэтому я надеюсь, что вы могли бы направить меня в правильном направлении.

РЕДАКТИРОВАТЬ 1

Добавление информации по запросу.К сожалению, я думаю, что мой php-код далек от ответов, так как он прост:

$data_in = new_doubleArray(2); // surely wrong
doubleArray_setitem($data_in, 0, 5);
doubleArray_setitem($data_in, 0, 10);

$options = new_doubleArray(1);

$out = new_doubleArray(1); // surely wrong, too

func_name(10, $in, $options, $out)

Насколько я понимаю, $ in и $ out должны быть массивамимассивов, здесь я использую new_doubleArray () только потому, что это то, что мне удалось сделать, чтобы правильно вызвать другую функцию, которая принимает массив double в качестве аргумента.

Примечание: Я также отредактировал library.i , добавив корзины включение и doubleArray определение, ранее опущенное, так как я думал, что это выходит за рамки.

...