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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
int ns__gpioAnalogRead(int Channel, int nSample, struct Data_Read{float* __ptr; int __size;} &DR);
Le tableau est rempli :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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,