Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

DotNetDélégué fait planter la compilation

3 réponses
Avatar
JC
Bonjour

Comme indiqu=E9 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=E9l=E9gu=E9), sachant que le code de mon
application est juste celui-ci + le code de la proc=E9dure donn=E9e ci-
dessous. Il n=92y a rien ailleurs.

J=92ai int=E9gr=E9 la DLL Ivy.dll (trouv=E9e =E0 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=92ai m=EAme int=E9gr=E9e dans les fichiers =E0 int=E9=
grer
dans la compilation (mais que je le fasse ou non, =E7a n=92a rien chang=E9)=
.

Avez-vous une id=E9e ? La ligne qui fait planter est celle avec
DotNetD=E9l=E9gu=E9. Sans elle, la compilation se passe bien. De m=EAme, qu=
e
je mette le test =AB EnModeTest =BB ou non, =E7a plante =E0 la compilation.

pclBus est Ivy dynamique
pclBus =3D allouer Ivy

clTestBinding est un IvyApplicationBinding
clTestBinding =3D allouer IvyApplicationBinding
clTestBinding:Expression =3D "(.*)"


SI PAS EnModeTest() ALORS

pclMonHandler est un IvyMessageEventArgs dynamique
pclMonHandler =3D DotNetD=E9l=E9gu=E9("testCallback","IvyMessageEventArgs"=
)
SI pclMonHandler <> Null ALORS
clTestBinding:add_callback(pclMonHandler)
Info("ajout d=E9l=E9gu=E9 OK")
SINON
Info("ajout d=E9l=E9gu=E9 pas ok")
FIN
FIN

pclBus:Start("134.206.255.255:2010")
pclBus:BindMsg(clTestBinding)
pclBus:SendMsg("coucou ",Null)
pclBus:Stop()


La proc=E9dure pour le callback :

PROCEDURE testCallback(src, args)
Info("Callback appel=E9")
Info(args:Message)
RENVOYER Vrai


Merci d'avance

JC

3 réponses

Avatar
JC
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
Avatar
ner0lph
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…

@+
Avatar
ner0lph
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…

@+