PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Procédure comme paramètre : System.Func
Procédure comme paramètre : System.Func
Iniciado por Esteban BERNARD, 11,dic. 2019 11:51 - 8 respuestas
Miembro registrado
24 mensajes
Publicado el 11,diciembre 2019 - 11:51
Bonjour,

J'ai assemblage .NET duquel je souhaite appeler une fonction prenant comme argument un Func<double, double>. J'ai déclaré une procédure comme ceci :
Procedure Test(d1 réel) : réel
RENVOYER 2*d1


Et je tente d'appeler la fonction de la manière suivante :
MonObject.MaFonction(MaProcédure)

et
MonObject.MaFonction(&MaProcédure)


Mais aucune des deux syntaxes n'est reconnue.
Comment puis-je appeler ce type de fonction ?

Merci d'avance pour votre aide,
Miembro registrado
948 mensajes
Publicado el 11,diciembre 2019 - 12:01
Bonjour
Vous écrivez "double,double" et vous déclarez des réels, normal ?
Que contient "MaProcédure" ?

--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Mensaje modificado, 11,diciembre 2019 - 12:11
Miembro registrado
24 mensajes
Publicado el 11,diciembre 2019 - 14:47
Bonjour,
Tout d'abord merci pour votre réponse.

Il me semble que le type réel de windev correspond au type double en C# et donc qu'une fonction attendant un Func<double, double> devrait prendre une procédure prenant un réel et renvoyant un réel.

Dans mon précédant message j'ai commis une erreur :
MonObject.MaFonction(Test)

et
MonObject.MaFonction(&Test)
Miembro registrado
948 mensajes
Publicado el 11,diciembre 2019 - 15:18
Bonjour
Si je comprend bien votre problème vous avez la méthode d'une classe d'un assemblage .NET qui attend comme paramètres une fonction(double,double) ?

--
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
Quand un utilisateur vous a aidé, n'oubliez pas de le remercier...
Miembro registrado
24 mensajes
Publicado el 11,diciembre 2019 - 16:08
Oui c'est cela
Miembro registrado
352 mensajes
Publicado el 11,diciembre 2019 - 16:12
Bonjour.
En regardant cette documentation : https://doc.pcsoft.fr/?1000018907&name=procedure_type_variable&product=WD

Le code qui me viendrait à l'esprit devrait être du genre
p est une Procedure
p=Test
MonObject.MaFonction(p)
Miembro registrado
512 mensajes
Publicado el 11,diciembre 2019 - 16:30
Bonjour,

Func<double,double> ça ressemble à un délégué .NET.

Si c'est bien le cas, alors il faut regarder du côté de la fonction DotNetDélégué :
https://doc.pcsoft.fr/fr-FR/?1000017052
Mensaje modificado, 11,diciembre 2019 - 16:31
Miembro registrado
24 mensajes
Publicado el 12,diciembre 2019 - 07:53
Bonjour,

Tout d'abord merci à tous, j'ai réussi à faire ce que je voulais même si la syntaxe n'est pas très éléguante ou pratique. Voilà la solution que j'utilise, merci à =JBO= pour m'avoir indiqué la fonction DotNetDélégué.
J'ai d'abord essayé le code ci-après mais Windev dans l'éditeur souligne le type en rouge et m'indique que "Le type de délégué .NET System.Func<double,double> est inconnu"
Program::f(DotNetDélégué(Test,"System.Func<double,double>"))


Pour résoudre ce problème j'ai donc déclaré moi-même un type de délégué dans mon assemblage :
PUBLIC delegate double FONCTION(double x);

et là le code suivant fonctionne:
Program::f(DotNetDélégué(Test,"Program.Fonction"))


J'aurai aimé que Windev reconnaisse le type Func qui permet de déclaré des délégués implicitement mais je me contenterai de cela pour l'instant.

Merci encore à tous pour votre aide,
Miembro registrado
512 mensajes
Publicado el 12,diciembre 2019 - 14:12
Bonjour Esteban,

Merci pour le retour et l'explication technique qui sera certainement utile à d'autres.

:-)