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.
Dans mon cas :Code:
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 };
Le tableau est rempli :Code:int ns__gpioAnalogRead(int Channel, int nSample, struct Data_Read{float* __ptr; int __size;} &DR);
En affichant dans la console les valeurs contenues dans DR.__ptr, j'ai bien la valeur 5 partout.Code:
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); }
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.
On remarque une suite de 5 et de 0 avec des valeurs intercalées.Code:
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>
Si quelqu'un a un début d’explication je suis preneur.
Merci,
Damien,