Bonjour tout le monde.
Je travaille sur un web service à généré par Gsoap.
J'expose mon problème.
J'ai un tableau de float à envoyer.
J'utilise l'exemple de Gsoap du One-Dimensional Dynamic SOAP Arrays qui utilise un pointeur et la taille du tableau.
1 2 3 4 5 6 7
| struct some_name
{
Type *__ptr; // pointer to array of elements in memory
int __size; // number of elements pointed to
[[static const] int __offset [= ...];] // optional SOAP 1.1 array offset
... // anything that follows here will be ignored
}; |
Dans mon cas :
int ns__gpioAnalogRead(int Channel, int nSample, struct Data_Read{float* __ptr; int __size;} &DR);
Le tableau est rempli :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
int ns__gpioAnalogRead(struct soap* soapPRM,int Channel,int nSample, struct Data_Read &DR)
{
int i=0;
DR.__ptr=(float*)malloc(nSample*sizeof(float));
DR.__size=nSample;
for(i=0;i<nSample;i++)
{
*DR.__ptr=5.0000;
DR.__ptr=DR.__ptr+sizeof(float);
}
DR.__ptr=DR.__ptr-(sizeof(float)*nSample);
return SOAP_OK;
free(DR.__ptr);
} |
En affichant dans la console les valeurs contenues dans DR.__ptr, j'ai bien la valeur 5 partout.
Ensuite je capture à l'aide de Wireshark le paquet contenant le fichier XML et mon tableau et la surprise, les données qu'il contient sont fausses.
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:rpiGpio">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<ns:gpioAnalogReadResponse>
<DR SOAP-ENC:arrayType="xsd:float[25]" xsi:type="SOAP-ENC:Array">
<item>5</item><item>0</item><item>-0.346070766</item><item>0</item><item>5</item><item>1.40129846E-45</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item><item>0</item><item>5</item>
</DR>
</ns:gpioAnalogReadResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> |
On remarque une suite de 5 et de 0 avec des valeurs intercalées.
Si quelqu'un a un début d’explication je suis preneur.
Merci,
Damien,
Partager