DotNetDélégué fait planter la compilation
Le
JC
Bonjour
Comme indiqué dans la doc, je dois compiler mon code ci-dessous pour
le tester, mais mon PC plante chaque fois que je veux compiler ce code
(plantage sur la ligne DotNetDélégué), sachant que le code de mon
application est juste celui-ci + le code de la procédure donnée ci-
dessous. Il ny a rien ailleurs.
Jai intégré la DLL Ivy.dll (trouvée à http://www2.tls.cena.fr/pr=
oducts/ivy/download/binaries.html
si vous voulez tester, dans Windows, Ivy DLL C#) comme
assemblage .NET. Je lai même intégrée dans les fichiers à inté=
grer
dans la compilation (mais que je le fasse ou non, ça na rien changé)=
.
Avez-vous une idée ? La ligne qui fait planter est celle avec
DotNetDélégué. Sans elle, la compilation se passe bien. De même, qu=
e
je mette le test « EnModeTest » ou non, ça plante à la compilation.
pclBus est Ivy dynamique
pclBus = allouer Ivy
clTestBinding est un IvyApplicationBinding
clTestBinding = allouer IvyApplicationBinding
clTestBinding:Expression = "(.*)"
SI PAS EnModeTest() ALORS
pclMonHandler est un IvyMessageEventArgs dynamique
pclMonHandler = DotNetDélégué("testCallback","IvyMessageEventArgs"=
)
SI pclMonHandler <> Null ALORS
clTestBinding:add_callback(pclMonHandler)
Info("ajout délégué OK")
SINON
Info("ajout délégué pas ok")
FIN
FIN
pclBus:Start("134.206.255.255:2010")
pclBus:BindMsg(clTestBinding)
pclBus:SendMsg("coucou ",Null)
pclBus:Stop()
La procédure pour le callback :
PROCEDURE testCallback(src, args)
Info("Callback appelé")
Info(args:Message)
RENVOYER Vrai
Merci d'avance
JC
Comme indiqué dans la doc, je dois compiler mon code ci-dessous pour
le tester, mais mon PC plante chaque fois que je veux compiler ce code
(plantage sur la ligne DotNetDélégué), sachant que le code de mon
application est juste celui-ci + le code de la procédure donnée ci-
dessous. Il ny a rien ailleurs.
Jai intégré la DLL Ivy.dll (trouvée à http://www2.tls.cena.fr/pr=
oducts/ivy/download/binaries.html
si vous voulez tester, dans Windows, Ivy DLL C#) comme
assemblage .NET. Je lai même intégrée dans les fichiers à inté=
grer
dans la compilation (mais que je le fasse ou non, ça na rien changé)=
.
Avez-vous une idée ? La ligne qui fait planter est celle avec
DotNetDélégué. Sans elle, la compilation se passe bien. De même, qu=
e
je mette le test « EnModeTest » ou non, ça plante à la compilation.
pclBus est Ivy dynamique
pclBus = allouer Ivy
clTestBinding est un IvyApplicationBinding
clTestBinding = allouer IvyApplicationBinding
clTestBinding:Expression = "(.*)"
SI PAS EnModeTest() ALORS
pclMonHandler est un IvyMessageEventArgs dynamique
pclMonHandler = DotNetDélégué("testCallback","IvyMessageEventArgs"=
)
SI pclMonHandler <> Null ALORS
clTestBinding:add_callback(pclMonHandler)
Info("ajout délégué OK")
SINON
Info("ajout délégué pas ok")
FIN
FIN
pclBus:Start("134.206.255.255:2010")
pclBus:BindMsg(clTestBinding)
pclBus:SendMsg("coucou ",Null)
pclBus:Stop()
La procédure pour le callback :
PROCEDURE testCallback(src, args)
Info("Callback appelé")
Info(args:Message)
RENVOYER Vrai
Merci d'avance
JC

Poser une question


des idées pour des réponses), voici comment on écrit la même chose en
C# . Si on veut déclarer que lenvoi du message « unMessage » sur l e
bus déclenche lappel de la méthode OnClickEvent, alors on écrit :
bus.BindMsg("unMessage", new EventHandler<IvyMessageEventArgs>
(OnClockEvent));
le EventHandler est une classe Générique qui nécessite un paramètre de
type pour l'instanciation: IvyMessageEventArgs
le OnClockEvent est une méthode d'instance de l'objet dans lequel se
trouve le bindMsgn, et qui a pour prototype "void OnClockEvent(object
sender, IvyMessageEventArgs e)"
Donc jécris en Windev le code donné ci-dessous (à la fin). Dans ce
code, je créé un délégué .net pour créer le callback. Jai do nc écrit:
pclMonHandler = DotNetDélégué
("testCallback","EventHandler<IvyMessageEventArgs>"),
mais lors de la frappe, j'ai immédiatement l'erreur :
Erreur : Le type de délégué .NET 'EventHandler<IvyMessageEventArgs>'
est inconnu.
Même chose avec "EventHandler<IvyMessageEventArgs>()", ou
"EventHandler<IvyMessageEventArgs()>", ou "<IvyMessageEventArgs>"
Pourtant il semble que pclMonHandler = DotNetDélégué
("testCallback","EventHandler<IvyMessageEventArgs>") soit la bonne
écriture (daprès le code C#). La seule écriture qui « passe » le cap
de lanalyse syntaxique est celle de mon précédent post, mais ça ne
passe pas à la compilation, et en plus elle na pas de sens comparé a u
code C#. Les formats ci-dessus ne passant pas le cap de lanalyse,
impossible de compiler également.
Pourquoi est-ce que ça ne marche pas ? La DLL est la même (même
fichier) que celle utilisée dans le code C# ci-dessus, et ça marche en
C#. Est-ce que cest Windev qui est incapable de détecter correctement
les callbacks quon peut écrire avec cette DLL ?
Code windev de lexemple :
pclBus est Ivy dynamique
pclBus = allouer Ivy
clTestBinding est un IvyApplicationBinding
clTestBinding = allouer IvyApplicationBinding
clTestBinding:Expression = "(.*)"
pclMonHandler est un IvyMessageEventArgs dynamique
pclMonHandler = DotNetDélégué("testCallback","IvyMessageEventArgs")
clTestBinding:add_callback(pclMonHandler)
pclBus:Start("134.206.255.255:2010")
pclBus:BindMsg(clTestBinding)
pclBus:SendMsg("unMessage",Null)
pclBus:Stop()
la fonction/procédure testCallback prend deux paramètres en entrée
pour faire la même chose que void OnClockEvent(object sender,
IvyMessageEventArgs e)
JC