Я использую 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 определение, ранее опущенное, так как я думал, что это выходит за рамки.