swig-php sarıcı işaretçi kullanır, c kodu bir dizidir

0 Cevap php

Ben bir 'c' ortak lib içine çağıran bir PHP uzantısı oluşturmak için SWIG kullanıyorum. Ben şu durum dışında çalışmak için birçok şey almak mümkün ...

Benim 'c' kodu ben (bu yapı ve işlev adları masum korumak için değiştirildi unutmayın) gibi bir işlev bildirmek:

int getAllThePortInfo(EthernetPort *ports);

Bu durumda, parametre ports aslında EthernetPort yapıların bir dizidir. Başka bir 'c' programında, böyle denilen olabilirdi ...

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

Bu çalışıyor. Sonra, SWIG koşmak benim paylaşılan lib oluşturmak, ve tüm iyi oluşturur. Ben arayabilirsiniz php kodunu almak ...

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

Bu PHP aşağıdaki hata atmak olur: php: free(): invalid pointer: 0x099cb610

Yani, böyle bir şey yapmaya çalıştım ...

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

But then PHP complained... PHP Fatal error: Type error in argument 1 of getAllThePortInfo. Expected SWIGTYPE_p_EthernetPort

Ne oluyor düşünüyorum PHP (ve yudum) işaretçiler ve diziler arasında ayrım yoktur, ve gerçekte, bu yapıların bir dizi olduğunda, sarıcı, bu 'tek bir yapı göstericisi' düşünüyor olmasıdır.

Yapabileceğim PHP bir şey var mı? Birden fazla yapısını saklamak için bir alan olarak kullanabileceğiniz bellek yığını tahsis?

Benim sarıcı daha iyi benim niyetlerini anlamak için yapabileceğiniz yudum ile bir şey var mı?

Ben gerçekten herhangi bir öneriniz seviniriz. Teşekkürler.

0 Cevap