PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Utilisation procedure C# erreur passage paramétres
Utilisation procedure C# erreur passage paramétres
Started by Cendrine, Jan., 19 2021 3:52 PM - 9 replies
Posted on January, 19 2021 - 3:52 PM
Bonjour à tous,
J'essaye désespérément d'utiliser une fonction C# qui fonctionne avec une variable définie dans ma procédure
ex :

using System;
using System.Text;
using System.Globalization;


public static double CalculPoly()
{
double values = 0;
byte[] bytes = {76,72,105,237,161,148,246,63}; 
for (int index = 0; index < bytes.Length - 7; index = index + 8) { 
values = BitConverter.ToDouble(bytes, index); 

return values;
}


----------------------------------------

// Montableau = byte[] bytes = [76,72,105,237,161,148,246,63]
Montableau est un tableau de 8 entiers = [76,72,105,237,161,148,246,63]
CalculPoly(Montableau)

using System;
using System.Text;
using System.Globalization;

public static double CalculPoly(byte[] bytes)
{
double values = 0;
for (int index = 0; index < bytes.Length - 7; index = index + 8) { 
values = BitConverter.ToDouble(bytes, index); 

return values;
}

Mais si j'essaye de passer mon tableau comme ceci j'ai une erreur...
Comment puis je proceder pour passer [76,72,105,237,161,148,246,63] en paramètres ?

Merci d'avance de vos réponse.

CDT C
Registered member
160 messages
Popularité : +18 (22 votes)
Posted on January, 19 2021 - 5:42 PM
Bonjour,
Essaie cela :
Montableau est un tableau d'octets = [76,72,105,237,161,148,246,63]


CalculPoly(Montableau)
Registered member
160 messages
Popularité : +18 (22 votes)
Posted on January, 19 2021 - 5:45 PM
Ou
Montableau est un tableau d'entier sur 1 octet
Posted on January, 19 2021 - 6:27 PM
Merci Kevin pour ta réponse.:merci:

Quand je fais :
Montableau est un tableau d'octets = [76,72,105,237,161,148,246,63]
Trace(CalculPoly(Montableau))

Avec ma procédure en c#

using System;
using System.Text;
using System.Globalization;
public static double CalculPoly(byte[] bytes) {
double values = 0;
for (int index = 0; index < bytes.Length - 7; index = index + 8) { 
values += BitConverter.ToDouble(bytes, index);

return values;
}


J'ai l'erreur" l'expression ( Trace(CalculPoly(Montableau)) ) ne renvoie pas de résultats..."

J'ai beau chercher, je ne trouve pas la solution... pas non plus un pro du C# !

Pour simplifier et éviter le C#, existe t'il la même fonction BitConverter.ToDouble en windev ?

Merci d'avance
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on January, 20 2021 - 2:36 PM
hello,
moi je n'ai pas d'erreur si j'utilise la fonction dans une bibliothèque de classe c# fabriquée à l'extérieur de windev.
La fonction BitConverter.ToDouble convertit une série de 8 octets en double (réel sur 8 octets) avec un index si il y a plus de 8 octets dans le tableau pour commencer à partir de cet index. Comme tu n'as l'air d'avoir que 8 octets l'index est égal à 0 .
Voici une fonction Windev vite fait sur le gaz (à optimiser certainement) qui pourrait fonctionner dans le cas où le tableau fait toujours 8 octets :
Procedure ConversionOctetsEnRéel(letableau est un tableau d'octets) : réel sur 8 octets
r est un réel sur 8 octets
ind,valeur sont des octets
ind = 0
POUR TOUT elem de letableau
valeur = elem
Transfert(&r+ind, &valeur,1)
ind +=1
FIN
RENVOYER r


En tout cas avec tes 8 valeurs d'octets j'obtiens le même résultat qu'avec la fonction C# avec ce code :
Montableau est un tableau de 8 octets = [76,72,105,237,161,148,246,63]
Trace(MesClasses.MyControlClass.CalculPoly(Montableau))
Trace(ConversionOctetsEnRéel(Montableau))


Résultat :
1.411287238491
1.411287238491


--
Ami calmant, J.P
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on January, 20 2021 - 3:12 PM
Bonjour
Il semblerait d'après mes essais (en V24) que Windev ne supporte pas le type «byte[]».
Comme il supporte le type «string» vous pouvez faire :
PUBLIC static double CalculPoly(string MyData) {
byte[] bytes = Encoding.ASCII.GetBytes(MyData);
double values = 0;
for (int index = 0; index < bytes.Length - 7; index = index + 8) {
values += BitConverter.ToDouble(bytes, index);
}
RETURN values;
}


Le teste avec vos valeurs
MyData est une chaîne = Caract(76)+Caract(72)+Caract(105)+Caract(237)+Caract(161)+Caract(148)+Caract(246)+Caract(63)
Trace(CalculPoly(MyData))

trnvoie : 0.0004767922795611

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on January, 20 2021 - 3:22 PM
ma solution est fausse !
Le résultat est bien : 1.411287238491
Jurassic Pork a tout bon

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Registered member
962 messages
Popularité : +183 (185 votes)
Posted on January, 20 2021 - 5:38 PM
En plus simple :
Montableau est un tableau de 8 octets = [76,72,105,237,161,148,246,63]
MonReel est un réel sur 8 octets
Transfert(&MonReel,&Montableau,8)
Trace(MonReel)


Même résultat que précédemment.

--
Ami calmant, J.P
Posted on January, 21 2021 - 11:54 AM
Bonjour, merci à tous, je teste toutes vos reponses et je reviens vers vous.

Cendrine
Posted on January, 26 2021 - 3:49 PM
Merci pour vos réponses, tout marche super avec le dernier post.
Encore merci à vous.