PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Utilisation procedure C# erreur passage paramétres
Utilisation procedure C# erreur passage paramétres
Débuté par Cendrine, 19 jan. 2021 15:52 - 9 réponses
Posté le 19 janvier 2021 - 15:52
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
Membre enregistré
160 messages
Popularité : +18 (22 votes)
Posté le 19 janvier 2021 - 17:42
Bonjour,
Essaie cela :
Montableau est un tableau d'octets = [76,72,105,237,161,148,246,63]


CalculPoly(Montableau)
Membre enregistré
160 messages
Popularité : +18 (22 votes)
Posté le 19 janvier 2021 - 17:45
Ou
Montableau est un tableau d'entier sur 1 octet
Posté le 19 janvier 2021 - 18:27
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
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 20 janvier 2021 - 14:36
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
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 20 janvier 2021 - 15:12
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
Membre enregistré
945 messages
Popularité : +102 (110 votes)
Posté le 20 janvier 2021 - 15:22
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
Membre enregistré
962 messages
Popularité : +183 (185 votes)
Posté le 20 janvier 2021 - 17:38
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
Posté le 21 janvier 2021 - 11:54
Bonjour, merci à tous, je teste toutes vos reponses et je reviens vers vous.

Cendrine
Posté le 26 janvier 2021 - 15:49
Merci pour vos réponses, tout marche super avec le dernier post.
Encore merci à vous.