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 n’y a rien ailleurs.

J’ai 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 l’ai même intégrée dans les fichiers à inté=
grer
dans la compilation (mais que je le fasse ou non, ça n’a 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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JC
Le #20311481
Pour faire suite à mon post ci-dessus (et ça vous donnera peut-être
des idées pour des réponses), voici comment on écrit la même chose en
C# . Si on veut déclarer que l’envoi du message « unMessage » sur l e
bus déclenche l’appel 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. J’ai 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 (d’après le code C#). La seule écriture qui « passe » le cap
de l’analyse syntaxique est celle de mon précédent post, mais ça ne
passe pas à la compilation, et en plus elle n’a pas de sens comparé a u
code C#. Les formats ci-dessus ne passant pas le cap de l’analyse,
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 c’est Windev qui est incapable de détecter correctement
les callbacks qu’on peut écrire avec cette DLL ?

Code windev de l’exemple :
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
ner0lph Hors ligne
Le #25206032
Le mardi 06 Octobre 2009 à 00:15 par 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 n’y a rien ailleurs.

J’ai 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 l’ai même intégrée dans les fichiers à inté=
grer
dans la compilation (mais que je le fasse ou non, ça n’a 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


Hello,

Depuis le temps, as-tu trouvé ? J'en suis au point « plantage à l'exécution » soi-disant que l'assemblage n'existe pas…

@+
ner0lph Hors ligne
Le #25206042
Le mardi 06 Octobre 2009 à 00:15 par 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 n’y a rien ailleurs.

J’ai 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 l’ai même intégrée dans les fichiers à inté=
grer
dans la compilation (mais que je le fasse ou non, ça n’a 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


Hello,

Depuis le temps, as-tu trouvé ? J'en suis au point « plantage à l'exécution » soi-disant que l'assemblage n'existe pas…

@+
Publicité
Poster une réponse
Anonyme