|
| 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 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 352 mensajes |
|
| Publicado el 11,diciembre 2019 - 16:12 |
| |
| |
| | | |
|
| | |
| |
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/?1000017052Mensaje 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.
 |
| |
| |
| | | |
|
| | | | |
| | |
|