swig-php wrapper использует указатель, c-код – массив

Я использую SWIG для генерации расширения PHP, которое вызывает «c» shared lib. Я могу заставить большинство работать, кроме следующей ситуации …

В моем коде «c» я объявляю функцию как (обратите внимание, что имена структуры и функций были изменены для защиты невинных):

int getAllThePortInfo(EthernetPort *ports); 

В этом случае порты параметров фактически представляют собой массив структур EthernetPort. В другой программе «c» я мог бы назвать это так …

 EthernetPort ports[4]; int rval = getAllThePortInfo(ports); <etc> <etc> и EthernetPort ports[4]; int rval = getAllThePortInfo(ports); <etc> <etc> 

Это прекрасно работает. Затем я запускаю SWIG, создаю свою общую библиотеку, и все строит хорошо. Я получаю php-код, который я могу назвать …

 $ports = new_ethernetport(); $rval = getAllThePortInfo($ports); 

Это заставляет PHP вызывать следующую ошибку: php: free (): неверный указатель: 0x099cb610

Итак, я попытался сделать что-то вроде …

 $ports = array(new_ethernetport(), new_ethernetport(), new_ethernetport(), new_ethernetport()); $rval = getAllThePortInfo($ports); 

Но затем PHP жаловался … PHP Неустранимая ошибка: введите ошибку в аргументе 1 getAllThePortInfo. Ожидаемый SWIGTYPE_p_EthernetPort

Я думаю, что это происходит потому, что PHP (и SWIG) не различают указатели и массивы, а в оболочке он думает «указатель на одну структуру», когда на самом деле это массив структур.

Есть ли что-то в PHP, которое я могу сделать? Выделите кусок памяти, который я могу использовать как пространство для хранения нескольких структур?

Есть ли что-то с SWIG, которое я могу сделать, чтобы моя обложка лучше поняла мои намерения?

Я действительно был бы признателен за любые предложения. Благодарю.