#php #c #swig
#php #c #swig
Вопрос:
Я использую Swig для упаковки сторонней библиотеки C и загрузки ее как общего расширения PHP.
У меня возникли проблемы с вызовом обернутой функции, ошибка:
Введите ошибку в аргумент 2 func_name . Ожидаемый SWIGTYPE_p_p_double в […]
Я попытался прочитать соответствующие части документации Swig и столько примеров, сколько смог найти, но, не зная C, у меня все еще много сомнений.
Я хотел бы знать, как сопоставить с типом 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, добавив включение carrays и определение doubleArray, ранее опущенные, поскольку я думал, что это выходит за рамки.
Комментарии:
1. Вы также должны опубликовать PHP-код, в котором вы пытаетесь вызвать функцию.
2. Извините, @MarkBenningfield, вы правы. Отредактировал вопрос.