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

Impossible d'utiliser cette DLL

12 réponses
Avatar
JC
Bonjour

Je cherche =E0 m'interfacer avec Ivy.dll que vous trouverez =E0
http://www2.tls.cena.fr/products/ivy/download/binaries.html (en C#, C+
+,...). Nous utilisons ces DLL en VB, C#, Java, elles fonctionnent
tr=E8s bien. J'ai essay=E9 de les int=E9grer dans du code Windev (et =E0 te=
rme
je voudrais faire de m=EAme en Windev Mobile), mais =E7a ne marche pas.
Chaque fois WD me dit que la fonction n'existe pas, or elle existe bel
et bien puisque d=E9j=E0 test=E9 dans d'autres langages. Avez-vous une
id=E9e ?

Voici un exemple de code ci-dessous. Windev charge bien la DLL, mais
ne trouve pas la fonction (j'ai essay=E9 start, Start, START... m=EAme
r=E9sultat).

HndlLib est un entier

// Chargement de la librairie
sNomDLL est une cha=EEne
sNomDLL =3D "C:\Mes Projets\Test Ivy\Ivy.dll"
// pour info, j'ai essay=E9 aussi dans Windows, WIndows\System32... idem

HndlLib=3DChargeDLL(sNomDLL)
SI HndlLib=3D0 ALORS
Info("La Librairie n'est pas charg=E9e")
SINON
Info("La Librairie est charg=E9e")
AppelDLL32(sNomDLL,"start", "127.0.0.1:2010"))
Trace("ok")

// D=E9charge la librairie
D=E9chargeDLL(HndlLib)
FIN

Merci par avance

JC

2 réponses

1 2
Avatar
JC
Bonjour

En creusant encore une nouvelle fois, j'ai appris qu'une des DLL est
utilisable en environnement .NET; je l'ai importée dans Windev comme
composant .Net dans Windev. Du coup, je peux écrire :
pclBus est Ivy dynamique
pclBus = allouer Ivy

Ensuite, quand je tape pclBus: j'obtiens une liste de fonctions/
propriétés (je suppose) associées à cet objet, donc l'objet est bie n
reconnu, c'est cool. Donc j'écris par exemple :
pclBus:Start("127.0.0.1:2010")
pclBus:Stop()
et ça semble marcher. Pour info, ce bus Ivy permet la communication
entre des machines PC, Mac, Linux, en C, C++, C#, Java, Python,... ça
peut peut-être vous aider dans vos applications...

Maintenant le souci est à un autre endroit :
pour créer un binding, l'objet bus me propose soit BindMsg, soit
BindSimpleMsg.
Le premier demande un seul paramètre de type IvyApplicationBinding,
alors que le second demande 3 paramètres (une chaine, un callback de
type IvyMessageEventArgs et un tableau d'objects).
J'ai essayé de créer des objets de ces types et de les remplir avant
de les passer en paramètres, mais rien ne marche. Donc je rate
certainement une étape.

Pour le BindMsg, par exemple, j'ai tenté :
pclTestBinding est IvyApplicationBinding dynamique
pclTestBinding = allouer IvyApplicationBinding
pclTestBinding:Expression = "(.*)" //ça c'est bon, car si je fais
afficher pclTestBinding:Expression , j'obtiens bien (.*) .

ensuite j'essaie de faire de même pour définir le callback en
faisant :
pclTestBinding:Callback = maFonction // maFonction étant le nom
d'une fonction que j'ai écrite en Windev, mais ça ne fonctionne pas.
De même avec &maFonction, maFonction(), &maFonction().
Est-ce que ce n'est pas comme ça qu'on définit le callback dans ce
cas ?

Je sais (enfin, je crois) que je devrai ensuite écrire :
pclBus:BindMsg(pclTestBinding) pour faire le binding.


Pour la seconde syntaxe, BindSimpleMsg demande le callback de type
IvyMessageEventArgs, donc j'ai essayé :
pclCallback est un IvyMessageEventArgs dynamique
pclCallback = allouer IvyMessageEventArgs
pclCallback = maFonction

mais là, Windev me dit "Erreur :Mauvais paramètre pour le constructeur
de la classe IvyMessageEventArgs", et je n'ai pas plus d'info :-
( (rien dans les docs)
J'ai essayé aussi de choisir des propriétés de IvyMessageEventArgs ,
par exemple pclCallback:Argument = maFonction ou autre, mais rien ne
passe (lecture seule pour cet argument, etc).

De même, ensuite, je pense que je devrai écrire :
pclBus:BindSimpleMsg("(.*)",pclCallback, Null) // j'ai mis Null
parce que je ne sais pas à quoi correspond ce tableau d'objets
demandés :-(

Si vous avez des idées sur tout ça, je prends. De plus, comment avec
Windev puis-je consulter "l'intérieur" du composant .Net par exemple
pour savoir quels paramètres manquent sur le constructeur, quelles
sont les propriétés en lecture seule, etc. ?

JC
Avatar
Fredo
Pour la lecture de la DLL, utilisez Reflector !

"JC" a écrit dans le message de news:

Bonjour

Je cherche à m'interfacer avec Ivy.dll que vous trouverez à
http://www2.tls.cena.fr/products/ivy/download/binaries.html (en C#, C+
+,...). Nous utilisons ces DLL en VB, C#, Java, elles fonctionnent
très bien. J'ai essayé de les intégrer dans du code Windev (et à terme
je voudrais faire de même en Windev Mobile), mais ça ne marche pas.
Chaque fois WD me dit que la fonction n'existe pas, or elle existe bel
et bien puisque déjà testé dans d'autres langages. Avez-vous une
idée ?

Voici un exemple de code ci-dessous. Windev charge bien la DLL, mais
ne trouve pas la fonction (j'ai essayé start, Start, START... même
résultat).

HndlLib est un entier

// Chargement de la librairie
sNomDLL est une chaîne
sNomDLL = "C:Mes ProjetsTest IvyIvy.dll"
// pour info, j'ai essayé aussi dans Windows, WIndowsSystem32... idem

HndlLib=ChargeDLL(sNomDLL)
SI HndlLib=0 ALORS
Info("La Librairie n'est pas chargée")
SINON
Info("La Librairie est chargée")
AppelDLL32(sNomDLL,"start", "127.0.0.1:2010"))
Trace("ok")

// Décharge la librairie
DéchargeDLL(HndlLib)
FIN

Merci par avance

JC
1 2