| DLL : | |
|
|
Auteur | Message |
---|
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: DLL : Sam 28 Mar 2009 - 13:17 | |
| Bonjour, j'aurais voulu savoir s'il était possible de lancer des fonctions de DLL car je voudrais utiliser votre langage qui me parait très bien fait et pour une fois très pratique afin de piloter une interface E/S qui est fournie avec sa DLL déjà écrite pour qu'on n'ait pas besoin de connaitre son fonctionnement interne mais qu'on puisse l'utiliser simplement par quelques fonctions de base comme par exemple l'écriture d'un BIT en sortie ou la lecture d'une entrée, son adressage etc. Bref, j'ai la carte, la DLL, la liste de ses fonctions qui m'iraient très bien, ainsi que votre langage qui lui aussi m'irait très bien mais je ne sais pas comment faire pour qu'il appel ces fonctions, après avoir pourtant bien lu tout le mode d'emploi. Bref, j'espère que je suis assez clair, car j'imagine bien que les gens doivent vous demander plains de trucs différents et que ça ne doit pas être facile pour vous de savoir ce qu'ils veulent mais là vraiment ça m'arengerais que ce soit possible de le faire. Merci d'avance.
NB : Et dans tous, les cas bonne continuation à votre projet très sympa. | |
|
| |
lagman
Nombre de messages : 205 Age : 32 Localisation : France Date d'inscription : 07/05/2008
| Sujet: Re: DLL : Dim 29 Mar 2009 - 23:06 | |
| bah pour le moment , il n'y a pas de fonction d'appel de DLL , c'est pour cela que tu ne l'as pas trouvé . | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Lun 30 Mar 2009 - 1:34 | |
| Ok, merci. Mais est-ce que tu penses que si j'utilisais les fonctions de lecture écriture sur le port paralel qui ouvrent une autre DLL tout en remplaçant son contenu par celui de la mienne, ça pourrait marcher ? | |
|
| |
lagman
Nombre de messages : 205 Age : 32 Localisation : France Date d'inscription : 07/05/2008
| Sujet: Re: DLL : Lun 30 Mar 2009 - 18:51 | |
| oh , la , j'ai pas les competences pour t'aider ^^ | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DLL : Lun 30 Mar 2009 - 19:09 | |
| Tim, bienvenue au grand club des utilisateurs de PANORAMIC. L'utilisation des DLL? Il y a longtemps que j'y pense... Lorsque j'ai vu ton message de samedi matin je me suis dis "je m'y mets" C'est pourquoi je ne te réponds que maintenant, mais en disant: "c'est fait !" J'y ai passé tout mon week-end, mais je suis content: l'utilisation des DLL va considérablement élargir les possibilités de PANORAMIC. Je viens de mettre sur le site, au téléchargement, la version du 30 mars de PANORAMIC_EDITOR qui permet d'utiliser les DLL. La documentation n'est pas encore rédigée. Et il n'y a pas encore de coloration syntaxique des appels des fonctions des DLL, mais tout cela viendra par la suite. Voici un petit tutoriel qui explique comment on utilise les DLL: A - Généralités.une DLL est une bibliothèque de fonctions appelables par programmation. Chaque fonction reçoit un ou plusieurs paramètres et retourne une valeur. Avec PANORAMIC, l'utilisation d'une DLL se fait avec les commandes et les fonctions de la famille DLL: DLL_ON DLL_OFF DLL_CALL1() DLL_CALL2() DLL_CALL3() DLL_CALL4()B - Détails.L'utilisation d'une fonction d'une DLL se fait en 3 temps: 1 - on charge la DLL en mémoire par la commande DLL_ONLa DLL doit être accessible et donc présente: - soit dans le répertoire de votre exécutable, - soit avec toutes les DLL de Windows, dans un répertoire du type Windows/system32. C'est cela la meilleure méthode. 2 - on appelle une des fonctions de cette DLL avec ses paramètres: Si la fonction a 1 paramètre, on l'appelle avec dll_call1 Si la fonction a 2 paramètres, on l'appelle avec dll_call2 Si la fonction a 3 paramètres, on l'appelle avec dll_call3 Si la fonction a 4 paramètres, on l'appelle avec dll_call4 Attention: les paramètres doivent être numériques. Ces appels ne marchent pas (pour le moment) lorsque l'un des paramètres est un string. 3 - quand on a fini d'utiliser les fonctions de la DLL, on libère les ressources par la commande DLL_OFFCodes d'erreurLes codes d'erreur possibles sont: pour DLL_ON : -> (136) Impossible To Load DLL -> (138) A DLL is Already Used pour DLL_OFF : -> (137) No DLL in Use pour DLL_CALLn : -> Error in Function -> Error in DLL Function Call C - Exemple.Voici un exemple de l'utilisation d'une DLL s'appelant MyDLL et qui contient 3 fonctions simples: - la fonction Double qui reçoit 1 paramètre et qui retourne le double de ce paramètre (d'où son nom) - la fonction Multiply qui reçoit 2 paramètres et qui retourne leur produit. - la fonction Subtract qui reçoit 2 paramètres et qui retourne leur différence. - Code:
-
dim a,b,c,d,e
a=4 b=6
dll_on "MyDLL.dll"
c=dll_call1("Double",a) d=dll_call2("Multiply",a,b) e=dll_call2("Subtract",a,b)
print c print d print e
dll_off
end Le résultat est l'affichage de: 8 24 -2 La DLL répondant au doux nom de MyDLL.dll est disponible ici au téléchargement pour vous entraîner: http://pagesperso-orange.fr/panoramic-language/Reference/Executable/MyDLL.dllLe source de l'exemple est disponible ici: http://pagesperso-orange.fr/panoramic-language/Reference/Sources/example_dll.basBonne utilisation!
Dernière édition par panoramic le Mar 31 Mar 2009 - 9:03, édité 1 fois (Raison : Correction) | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: DLL : Lun 30 Mar 2009 - 22:10 | |
| Ca c'est du nouveau intéressant ! bravo Panoramic ! | |
|
| |
lagman
Nombre de messages : 205 Age : 32 Localisation : France Date d'inscription : 07/05/2008
| Sujet: Re: DLL : Lun 30 Mar 2009 - 22:59 | |
| Ah en effet ca risque d'elargir les possiblités au maximum ! | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Mar 31 Mar 2009 - 1:40 | |
| OH MERCI ! C'est vraiment trop cool, je vais vite regarder tout ça, je vous tiendrais informé si le projet fonctionne et je mettrais mon source. Merci encore. | |
|
| |
bleunounet
Nombre de messages : 150 Date d'inscription : 26/10/2007
| Sujet: Re: DLL : Mar 31 Mar 2009 - 9:52 | |
| bonjour a panoramic et a tous encore une bonne nouvelle de plus coolllll comme sa je vais pouvoir aprendre les dlls bonne journée a tous | |
|
| |
bleunounet
Nombre de messages : 150 Date d'inscription : 26/10/2007
| Sujet: Re: DLL : Mar 31 Mar 2009 - 14:39 | |
| bon et bien pour moi sa marche pas la version 0.9.12 beta du 25 mars 2009 ne s'install pas il se passe rien part une fenetre cmd qui s'ouvre au faite je vois pas de version du 30 mars? je suis en retard ou quoi? ou j'ai la berlu loll a moins que je lise entre les lignes donc je peut pas m'entrainer haaa misère panoramic n'aime pas mon pc a croire | |
|
| |
lagman
Nombre de messages : 205 Age : 32 Localisation : France Date d'inscription : 07/05/2008
| Sujet: Re: DLL : Mar 31 Mar 2009 - 18:09 | |
| ouias la 25 mars deconne , j'lavait signalé ( d'alleur je retrouve pas le message ><) | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DLL : Mar 31 Mar 2009 - 21:36 | |
| Télécharger la dernière version a l'air de vous poser des problèmes. Eh bien, on arrête tout et on recommence: je viens de générer une nouvelle version beta pour la V 0.9.12 qui est téléchargeable soit sur le site, soit directement ici: http://pagesperso-orange.fr/panoramic-language/Reference/Executable/Setup_ED_FRA.exeEt pour me faire pardonner, je vous donne 2 applications directes des DLLs. le premier source est directement téléchargeable ici: http://pagesperso-orange.fr/panoramic-language/Reference/Sources/as_de_pique.bas - Code:
-
dim w%,h%,a%
dll_on "cards.dll" a%=dll_call2("cdtInit",adrs("w%"),adrs("h%")) a%=dll_call6("cdtDraw",handle(0),105,48,2,0,0) a%=dll_call0("cdtTerm") Le deuxième est sur le même thème: http://pagesperso-orange.fr/panoramic-language/Reference/Sources/jeu_de_cartes.bas - Code:
-
dim w%,h%,a%,i%
dll_on "cards.dll" a%=dll_call2("cdtInit",adrs("w%"),adrs("h%"))
for i%=0 to 3 a%=dll_call6("cdtDraw",handle(0),i%*110+20,20,i%,0,0) next i%
for i%=4 to 7 a%=dll_call6("cdtDraw",handle(0),(i%-4)*110+20,150,i%+44,0,0) next i%
for i%=8 to 11 a%=dll_call6("cdtDraw",handle(0),(i%-8)*110+20,280,i%+36,0,0) next i%
a%=dll_call0("cdtTerm") Attention: ces 2 sources ne fonctionnent qu'avec la dernière version : PANORAMIC_EDITOR du 31 mars 2009. Ils utilisent la DLL cards.dll que nous avons tous dans nos PC, puisque cette DLL est la base des jeux comme le Solitaire ou la Dame de Pique. La DLL n'a pas besoin d'être installée et les sources doivent tourner du premier coup, à condition de les faire tourner avec je le rappelle, la dernière version de PANORAMIC_EDITOR (du 31 mars 2009). En conclusion: les DLL ouvrent un horizon fantastique à PANORAMIC ! | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Mer 1 Avr 2009 - 8:26 | |
| Ok, je viens de l'essayer et effectivement, ça a l'air de marcher, je vais pouvoir me remettre au développement de mon projet et je vous tiens au courant mais déjà un grand merci vraiment. | |
|
| |
bleunounet
Nombre de messages : 150 Date d'inscription : 26/10/2007
| Sujet: panoramic et dll Mer 1 Avr 2009 - 8:46 | |
| bonjour panoramic merci beaucoup j'ai telecharger la derniere version beta et les deux applications et sa a fonctionner du premier coup haaaa enfinnnn je suis content j'ai essayer aussi example_dll.bas sa fonctionne aussi bien un grand merci panoramic bonne journée a tous | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Jeu 2 Avr 2009 - 11:59 | |
| Salut à tous. J'ai donc repris les essais et effectivement la nouvelle version ouvre bien les DLL mais là je suis en but à un problème, c'est que je ne sais pas comment maitriser le type de variable qu'elle attend en retour des fonctions appelées et je pense que ça doit être à l'origine de mon nouveau blocage car la première fonction que j'appelle qui est un OpenDevice( CardAddress ) est sensée me renvoyer un long égal à -1 quand la carte n'est pas trouvée à son adresse et j'ai toujours un 0 à la place ( même quand je ne branche pas la carte ). Donc quand l'adresse de la carte est justement 0 ça fait comme si elle était trouvée mais c'est sans doute un hasard et de toutes façons même si elle était bien connectée à ce moment là, ensuite les autres fonctions appelées ne lui font ni chaud ni froid, elles sont bien gérées par panoramic et ne provoquent pas d'erreur mais rien ne se passe. Bref, j'ai beaucoup réfléchis et je pense que ça doit venir d'un problème de compatibilité de type des variables utilisées entre panoramic et la DLL lors des appels et des passages de paramètres mais comme je ne sais pas de quel type panoramic considère que sont ses variables, je suis assez bien coincé là... En principe ma DLL, elle, travail avec du type long. Donc je me demande comment je pourrais déclarer mes variables à panoramic pour qu'il les gère en type long. Ou alors si quelqu'un aurait une autre idée bien sur .... Merci à tous. NB voila mon source de test : - Code:
-
dim c Rem devrait etre un long
c=1 Rem adresse de la cart
dll_on "k8055d.dll"
c=dll_call1("OpenDevice",c) Rem connecte la carte
print c Rem verification si elle a bien ete trouvee
c=dll_call0("SetAllDigital") Rem alume toutes les DEL
wait 1000 Rem laisse le temps de voir
c=dll_call0("CloseDevice") Rem libère les resources
dll_off
end
Dernière édition par panoramic le Jeu 2 Avr 2009 - 19:47, édité 1 fois (Raison : J'ai mis les balises CODE pour faire ressortir le code.) | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DLL : Jeu 2 Avr 2009 - 19:41 | |
| Voici quelques précisions. Jusqu'à présent, n'ayant pas vraiment de point de départ (tu demandais uniquement de pouvoir "lancer des fonctions de DLL), j'ai codé dans PANORAMIC des appels de fonctions de DLL (avec les mots-clés DLL_CALLn) en prenant l'hypothèse que les valeurs numériques passées à la fonction appelée étaient du type "entier" et que la valeur retournée par cette fonction de la DLL était aussi du type "entier". Par "entier", je veux dire une nombre entier signé, exprimé sur 32 bits (soit 4 octets), et qui peut contenir n'importe quelle valeur de -2147483648 à 2147483647. Cela correspond en fait en PANORAMIC au contenu d'une variable entière (les variables dont le nom doit être suivi du caractère "%"). Pour fixer les idées, on peut ainsi utiliser la fonction Double de la DLL donnée en exemple (MyDLL.dll) en l'appelant avec une valeur qui lui fera retourner pratiquement la valeur maximale positive exprimable sur 32 bits, c'est à dire la valeur 2147483646: - Code:
-
dim retour, param dll_on "MyDLL.dll" param = 1073741823 retour = dll_call1("Double",param) print param dll_off La fonction va donner correctement le résultat: 2147483646 mais si on dépasse de 1 et qu'on appelle la fonction "Double" avec la valeur 1073741824 (soit 1073741823 + 1), - Code:
-
dim retour, param dll_on "MyDLL.dll" param = 1073741824 retour = dll_call1("Double",param) print param dll_off on obtiendra un résultat éronné: -2147483648 car il y aura un overflow lors de la récupération de la valeur retournée. C'est pourquoi, pour résoudre ton problème, j'ai besoin de savoir ce que tu appelles un "long"? Si c'est un entier codé sur 4 octets, il n'y a à priori pas de problème. Dans ton exemple (et dans les miens d'ailleurs), on appelle une fonction d'une DLL avec une variable déclarée comme réelle. Mais avant l'appel de la fonction, cette valeur est convertie de façon interne en une valeur entière signée sur 4 octets. Donc quant tu dis: - Citation :
- dim c
Rem devrait etre un long
Eh bien non, dim c définit une variable c réelle mais pas entière au sens informatique. Mais ton problème ne vient sans doute pas de là. A moins que ta fonction OpenDevice ne réclame un réel? Essaye déjà ceci: - Code:
-
c=dll_call1("OpenDevice",1) Rem connecte la carte C'est à dire de passer à la fonction une valeur directe plutôt qu'une valeur dans une variable. | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Jeu 2 Avr 2009 - 20:36 | |
| Ok, j'essais tout de suite et je te dis ce que ça donne dans quelques minutes.
Sinon, si tu veux, je peux te faire passer la DLL en question si ça peux t'aider à voir. | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Jeu 2 Avr 2009 - 20:44 | |
| Voila, donc j'ai essayé et ça fait exactement pareil. Mais si tu me dis que les variables sont par défaut des INT dans panoramic, ça me parait logique qu'il y ait ce problème. Donc dans ce cas ma question serait, est-il possible de déclarer une variable comme un long ( 32 Bits signés ) ? En C je sais faire mais en basic, je dois reconnaitre que mes compétences sont assez limitées...
En tous cas merci toujours pour le boulot que tu as déjà fait aussi vite.
Tim.
Nb: Oups, je me rend compte après coup que tu explique qu'il faut mettre un % après la variable pour qu'elle soit entière ? Je vais donc explorer ça.
NB 2 : Bah non, j'ai essayé de remplacer c par c% mais ça fait exactement pareil. Je vais réfléchir à nouveau... | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Jeu 2 Avr 2009 - 21:41 | |
| Voici les fonctions de ma DLL :
FUNCTION long stdcall OpenDevice (long CardAddress); FUNCTION stdcall CloseDevice(); FUNCTION long stdcall ReadAnalogchannel (long Channel); FUNCTION stdcall ReadAllAnalog (long data1, long *Data2); FUNCTION stdcall OutputAnalogchannel (long Channel, long Data); FUNCTION stdcall OutputAllAnalog (long Data1, long Data 2); FUNCTION stdcall ClearAnalogchannel (long Channel); FUNCTION stdcall ClearAllAnalog (); FUNCTION stdcall SetAnalogchannel (long Channel); FUNCTION stdcall SetAllAnalog (); FUNCTION stdcall WriteAllDigital (long Data); FUNCTION stdcall ClearDigitalchannel (long Channel); FUNCTION stdcall ClearAllDigital (); FUNCTION stdcall SetDigitalchannel (long Channel); FUNCTION stdcall SetAllDigital(); FUNCTION bool stdcall ReadDigitalchannel (long Channel); FUNCTION long stdcall ReadAllDigital (); FUNCTION long stdcall Readcounter (long CounterNr); FUNCTION stdcall Resetcounter (long CounterNr); | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DLL : Ven 3 Avr 2009 - 9:37 | |
| OK, tu veux utiliser sous PANORAMIC la carte d'interface Velleman K8055D. J'ai téléchargé la DLL correspondante ainsi que des exemples d'application en C++. Je vais décortiquer tout cela et je te fais signe. A première lecture, le type de variable utilisé ("Long") correspond tout à fait au type entier utilisé par PANORAMIC. Mais je vais regarder tout cela dans le détail... | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DLL : Ven 3 Avr 2009 - 9:58 | |
| Bonne nouvelle: 1 - Je télécharge la dll: K8055D.dll (version V 2.001) sur le site officiel de Velleman http://www.velleman.be/downloads/files/downloads/k8055_dll_2_001.zip2 - je tape le programme: - Code:
-
dim v v=0 dll_on "K8055D.dll" v=dll_call1("OpenDevice",1) print v dll_off
3 - je lance, et j'obtiens -1 C'est à dire que cela FONCTIONNE: j'ai obtenu -1 comme le prévoit la documentation car je n'ai pas la carte Velleman. La seule différence avec ton code est que K et D du nom de la DLL sont en majuscules, car la DLL que j'ai téléchargé s'appelle K8055D.dll La déclaration de la DLL par DLL_ON est en effet sensible à la casse, c'est à dire qu'il faut bien respecter majuscules et minuscules. J'ai utilisé PANORAMIC_EDITOR du 31 mars 2009 | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Ven 3 Avr 2009 - 18:39 | |
| Alors là, l'informatique est vraiment déroutante ....
J'ai pris ton code basic par copier coller dans le PANORAMIC_EDITOR du 31 mars 2009, j'ai même par acquis de conscience re-téléchargé la dll du lien que tu donnes, je l'ais remplacé dans system32 et j'obtiens toujours 0 avec ou sans la carte branchée d'ailleurs.
Cette fois, le mystère c'épaissit.... Je vais réfléchir à nouveau... | |
|
| |
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: DLL : Dim 5 Avr 2009 - 21:52 | |
| J'ai essayé le code avec la DLL sur plusieurs PC différents et j'obtiens toujours -1 car la carte n'est pas présente. Je pense donc que tout fonctionne. Si des personnes qui ont suivi ce thread peuvent essayer et donner leur résultat... | |
|
| |
Tim
Nombre de messages : 17 Date d'inscription : 28/03/2009
| Sujet: Re: DLL : Lun 6 Avr 2009 - 2:54 | |
| Wowww, c'est vraiment bizarre. Alors en fait voila ce qui ce passe : J'ai refais plains de tests et au final j'ai découvert que ça marche mais à condition que l'OS soit XP ( heureusement j'ai une machine sur le réseau qui tourne sous XP ) Alors qu'avec toutes les machines qui sont sous 2003 ( comme celle sur la-quelle je développais ) ça rend toujours 0.
Tu y comprends quelque chose toi ?
Bon cela dit, à la limite ça ne me gêne pas trop, il va me suffire de passer la machine qui fera tourner l'application sur XP, mais c'est intellectuellement que ça me chiffonne, car j'ai horreur qu'un truc m'échappe comme ça quand je développe.
En tous cas merci de ton boulot, et désolé de t'avoir sans doute fait tourner en bourrique un moment avec mes problèmes ... | |
|
| |
Contenu sponsorisé
| Sujet: Re: DLL : | |
| |
|
| |
| DLL : | |
|