PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Utilisation procedure C# erreur passage paramétres
Utilisation procedure C# erreur passage paramétres
Iniciado por Cendrine, jan., 19 2021 3:52 PM - 9 respostas
Publicado em janeiro, 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
Membro registado
160 mensagems
Popularité : +18 (22 votes)
Publicado em janeiro, 19 2021 - 5:42 PM
Bonjour,
Essaie cela :
Montableau est un tableau d'octets = [76,72,105,237,161,148,246,63]


CalculPoly(Montableau)
Membro registado
160 mensagems
Popularité : +18 (22 votes)
Publicado em janeiro, 19 2021 - 5:45 PM
Ou
Montableau est un tableau d'entier sur 1 octet
Publicado em janeiro, 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
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em janeiro, 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
Membro registado
945 mensagems
Popularité : +102 (110 votes)
Publicado em janeiro, 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
Membro registado
945 mensagems
Popularité : +102 (110 votes)
Publicado em janeiro, 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
Membro registado
962 mensagems
Popularité : +183 (185 votes)
Publicado em janeiro, 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
Publicado em janeiro, 21 2021 - 11:54 AM
Bonjour, merci à tous, je teste toutes vos reponses et je reviens vers vous.

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