Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Nouvelle utilisation des bibliothèques | |
|
+5Francis-mr Klaus papydall Yannick Jack 9 participants | Auteur | Message |
---|
Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Nouvelle utilisation des bibliothèques Mar 8 Déc 2015 - 21:42 | |
| L'utilisation des DLLs avec DLL_ON, DLL_CALLn() et DLL_OFF ne m'a jamais satisfait. Ces commandes et fonctions avaient été écrites en un week-end suite à une demande sur le forum et ont été très peu améliorées. Elles ont des limitations, mais sont néanmoins très utiles car elles permettent d'étendre les possibilités du langage et on a vu un Panoramicien (Klaus) développer sa propre DLL et l'enrichir presque journellement. RappelJe voudrais juste rappeler ici pour les débutants la différence d'utilisation et de syntaxe entre commande et fonction. Commande : Utilisation : une commande est un ordre qu'on donne et qui s'exécute aussitôt. Syntaxe : une commande est constituée d'un mot-clé suivi ou pas de paramètres. S'il y a des paramètres, ils sont séparés par des virgules. exemples de commandes CLS efface un objet 2D_CIRCLE 100,200,50 trace un cercle de centre (100,200) et de rayon 50 Fonction: Utilisation : une fonction est comme une question qu'on pose en donnant ou pas des paramètres, et qui fournit un résultat. Syntaxe : s'il y a des paramètres, ils sont séparés par des virgules et sont placés entre parenthèses. exemples de fonctions a=cos(10) a vaut le cosinus de 10 degrés a$=time$ a$ vaut "l'heure actuelle" Revenons aux bibliothèques. Tout en gardant ce qui existe, pour des raisons de compatibilité ascendante (afin que les anciens sources fonctionnent sur toute nouvelle version de Panoramic), je voudrais proposer dans la prochaine version (V 0.9.27i3) que je mettrais en ligne sous peu, quelque chose de beaucoup plus souple à utiliser. Le principe est le suivant : On déclare les bibliothèques et on leur affecte un numéro. On décrit les commandes et fonctions utilisées dans une bibliothèque qu'on a déclarée et on leur affecte un mot-clé. Puis on les utilise comme on utiliserait les commandes et fonctions de Panoramic. Exemples Si on a une fonction dans une bibliothèque qui multiplie 2 nombres et qui retourne leur produit, on peut alors l'appeler "multip" et l'utiliser comme suit : - Code:
-
a=10 b=3 print multip(a,b)
autre exemple, si on a une commande dans une bibliothèque qui colore le fond d'écran en jaune et qu'on l'appelle "jaune" et une autre commande qui affiche un titre sur la fenêtre de base (Form0), qu'on appelle "affiche", on les utilise comme suit : - Code:
-
jaune affiche "bonjour"
En résumé, on se crée ses propres commandes et fonctions avec les noms qu'on choisit. Autres avantages : - on peut utiliser plusieurs bibliothèques simultanément, - il n'y a plus besoin d'ouvrir et de fermer les bibliothèques (comme on le faisait avec les commandes DLL_ON et DLL_OFF), - ce nouveau processus fonctionne sous Windows (une bibliothèque est une DLL), sous MAC OS X et sous Android. Entrons dans le détailDéclaration d'une bibliothèque : LIBRARY N, L$N : numéro de la bibliothèque L$ : nom absolu ou relatif de la bibliothèque (exemple : ma_lib.dll) déclaration d'une commande : COMMAND CP$,CL$,N,T$,C$CP$ : nom de la commande pour PANORAMIC CL$ : nom de la commande dans la bibliothèque (attention, CL$ est sensible à la casse : respectez majuscules et minuscules) N : numéro de la bibliothèque dans laquelle on trouve la commande T$ : chaine de caractères donnant le type de chaque paramètre : I (entier) R (réel) S (chaine de caractères) C$ : convention d'appel de la commande exemple : - Code:
-
command "init","cdtInit",1,"II","stdcall"
losque qu'on utilise le mot-clé Panoramic INIT, il y a en fait appel de la fonction cdtInit de la DLL numéro 1, et 2 entiers lui sont passés en paramètre. déclaration d'une fonction : FUNCTION CP$,CL$,N,T$,C$CP$ : nom de la fonction pour PANORAMIC CL$ : nom de la fonction dans la bibliothèque (attention, CL$ est sensible à la casse : respectez majuscules et minuscules) N : numéro de la bibliothèque dans laquelle on trouve la fonction T$ : chaine de caractères donnant le type de chaque paramètre : I (entier) R (réel) S (chaine de caractères) C$ : convention d'appel de la fonction Le type de retour est dans le nom de la fonction Panoramic: fonction "fn","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un réelfonction "fn%","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un entierfonction "fn$","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne une chaine de caractèresExemples : - Code:
-
dim w%,h%,a%
library 1,"cards.dll" command "init","cdtInit",1,"II","stdcall" command "draw","cdtDraw",1,"IIIIII","stdcall" command "fin","cdtTerm",1,"","stdcall"
init adr(w%),adr(h%) draw handle_canvas(0),105,48,2,0,0 fin
- Code:
-
library 1,"MyDLL.dll" function "double","Double",1,"I","stdcall" function "multiplie","Multiply",1,"II","stdcall"
dim a,b
a=4 b=6
print DOUBLE(a) print MULTIPLIE(a,b)
Encore autre chose. Si une commande ou une fonction qu'on déclare est identique à un mot-clé de Panoramic, c'est le mot-clé de Panoramic qui est pris en compte. Il y aura donc une erreur à l'exécution si la syntaxe (nombre de paramètres ou typê de paramètres) n'est pas celle de Panoramic. De même, si vous déclarez une commande ou une fonction qui existe déjà en natif et avec la même syntaxe, c'est la commande ou fonction native de Panoramic qui sera exécutée. Attention !Maintenant que vous êtes emballés, je vais vite modérer votre impatience. C'est le tout début de cette nouvelle façon de faire, tout n'est pas encore complètement codé et il y a des limitations. Pour le moment, - cela ne fonctionne qu'avec 6 paramètres maximum, - cela ne fonctionne que lorsque les paramètres sont entiers (d'où les IIII dans les exemples) - cela ne fonctionne que lorsque les fonctions retournent des nombres - le nombre de bibliothèques est limité à 10 _________________ username : panoramic@jack-panoramic password : panoramic123
Dernière édition par Jack le Jeu 10 Déc 2015 - 20:54, édité 9 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 8 Déc 2015 - 21:54 | |
| Tu fais bien de modérer les ardeurs... Pour la partie technique, je préfère laisser Klaus répondre. Pour l' instant c' est un peu flou dans mon esprit, il me faudra reprendre la lecture quand je serai sorti du html et css... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 8 Déc 2015 - 22:07 | |
| C'est très simple comme principe : tu te crées tes propres mots-clés, et derrière tes mots-clés il y a des commandes et des fonctions dans des DLL. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 8 Déc 2015 - 22:09 | |
| Waaaaououou ! C’est une excellente nouvelle que je lis là. Maintenant que tu nous as promis le bonheur, je ne peux que prier pour que ça soit dans les meilleurs délais. MERCI Jack, tu nous gâtes bien. Qu’espérer de mieux comme cadeau de fin d’année ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 8 Déc 2015 - 22:18 | |
| Je comprends vite, le problème est qu' il faut m' expliquer longtemps. Ne t' inquiètes pas Jack, je m' adapterai. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 8 Déc 2015 - 22:41 | |
| Super, Jack ! Je constate avec un réel plaisir que tu remets l'interface vers les DLLs sur l'ouvrage. Cela permet d'espérer de jolies choses. J'ai quelques remarques à faire: 1. concernant la définition des fonctions:Tu dis: - Citation :
- command "fn","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un réel
command "fn","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un entier command "fn$","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne une chaine de caractères Ce ne serait pas plutôt: - Citation :
- function "fn","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un réel
function "fn%","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un entier function "fn$","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne une chaine de caractères avec la commande FUNCTION en début de ligne, et l'ajout du "%" dans la 2ème ligne ? 2. les valeurs retournées:Tu dis: - Citation :
- Pour le moment,
- cela ne fonctionne qu'avec 6 paramètres maximum, - cela ne fonctionne que lorsque les paramètres sont entiers (d'où les IIII dans les exemples) - cela ne fonctionne que lorsque les fonctions retournent des nombres a) Une fonction pourrait maintenant retourner un flottant, au lieu de l'entier exclusivement, aujourd'hui ? C'est déjà un progrès ! b) Le retour d'une chaîne de caractères semble prévu, puisque tu as prévu la troisième ligne dans la citation ci-dessus. Est-ce exact ? c) 6 paramètres maximum. Donc, comme actuellement. Est-ce qu'un assouplissement est prévu ultérieurement ? d) tous les paramètres sont entiers. Mais tu as prévu le paramétrage du type. Donc, tu prévois ultérieurement le passage les flottants et des chaînes de caractères. Est-ce exact ? 3. Quelque gros souhaitsa) tableaux:je suppose que adr(), handle(), handle_canvas() et object_internal() pourront toujours être utilisés pour passer des paramètres à une fonction DLL. Mais il serait vraiment utile de pouvoir passer un tableau, ne serait-ce que d'une seule dimension (avec 2 dimensions, ce serait évidemment le summum !), sous forme de array(nom_du_tableau) par exemple. Ou alors adr(nom_du_tableau). On récupérerait alors, dans la DLL, l'adresse de l'élément (0) ou (0,0) du tableau. A la DLL de savoir gérer les dimensions du tableau qui pourraient éventuellement être passés dans des paramètres supplémentaires, comme ceci: - Code:
-
dim MonTableau%(5,8) command "Charger","ChargerTableau",3,"III","stdcall" Charger(5,8,array(MonTableau)) ou éventuellement: - Code:
-
dim MonTableau%(5,8) command "Charger","ChargerTableau",3,"III","stdcall" Charger(5,8,array("MonTableau")) similaire à la syntaxe de la fonction variable(). Actuellement, il faut recourir à des subterfuges importants, comme l'utilisation du presse-papier, un DLIST ou un MEMO caché etc pour passer le contenu d'un tableau. C'est lourd, et ça pourrait être si élégant... b) déclenchement d'évènementsactuellement, une fonction DLL n'a aucun moyen de déclencher directement une routine évènement Panoramic. Le seul moyen est de créer un EDIT caché avec un évènement ON_CHANGE en Panoramic, puis de changer le contenu de cet EDIT par un API SendMessage avec WM_SETTEXT ce qui déclenche l'évènement ON_CHANGE. On utilise alors le contenu du EDIT pour déterminer ce que la DLL a bien voulu signaler. Est-ce qu'on pourrait, tant qu'on y est, avoir une commande ON_DLL_EVENT qui indiquerait un label de ma manière suivante: - Code:
-
label event1, event2, ... ON_DLL_EVENT 1,event1 ON_DLL_EVENT 2,event2 ... event1: ... return event2: ... return et dans la DLL, on appelerait l'API SEND_MESSAGE avec un code message à partir de WM_APP. Et Panoramic recevrait ce message dont le paramètre WPARAM contiendrait le numéro de l'évènement à déclencher. Ce serait une grande ouverture ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 8 Déc 2015 - 23:30 | |
| Quand on assiste à une discussion entre grands, les petits comme moi doivent écouter pour apprendre et s’instruire. Je lirai avec beaucoup d'attention les échanges entre Jack (créateur de Panoramic) et Klaus (maître ès DLL) | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Nouvelle utilisation des bibliothèques Mer 9 Déc 2015 - 8:20 | |
| - Klaus a écrit:
- Ce ne serait pas plutôt:
Citation :function "fn","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un réel function "fn%","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un entier function "fn$","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne une chaine de caractèresavec la commande FUNCTION en début de ligne, et l'ajout du "%" dans la 2ème ligne ?
Evidemment... Je viens de corriger dans l'annonce. - Klaus a écrit:
- Une fonction pourrait maintenant retourner un flottant, au lieu de l'entier exclusivement, aujourd'hui ? C'est déjà un progrès !
C'est prévu, mais cela n'est pas encore codé. - Klaus a écrit:
- Le retour d'une chaîne de caractères semble prévu, puisque tu as prévu la troisième ligne dans la citation ci-dessus. Est-ce exact ?
Oui, c'est prévu, mais pas encore fait. Il faudra alors différencier les chaines de caractères (à zéro-terminal ou pas). J'envisage des fonctions de transformation comme NZT_TO_xxx ou xxx_TO_NZT (NZT=non-zero terminal) pour les paramètres ou pour exploiter le retour. - Klaus a écrit:
- 6 paramètres maximum. Donc, comme actuellement. Est-ce qu'un assouplissement est prévu ultérieurement ?
Oui, plus de 6 paramètres est envisagé. - Klaus a écrit:
- tous les paramètres sont entiers. Mais tu as prévu le paramétrage du type. Donc, tu prévois ultérieurement le passage les flottants et des chaînes de caractères. Est-ce exact ?
Oui, mais pour l'instant, il n'y a que les paramètres entiers qui sont codés. - Klaus a écrit:
- je suppose que adr(), handle(), handle_canvas() et object_internal() pourront toujours être utilisés pour passer des paramètres à une fonction DLL.
Bien sur. Et j'ajouterai les trans formations des chaines de caractères dont je parle plus haut. - Klaus a écrit:
- il serait vraiment utile de pouvoir passer un tableau, ne serait-ce que d'une seule dimension (avec 2 dimensions, ce serait évidemment le summum !), sous forme de array(nom_du_tableau) par exemple. Ou alors adr(nom_du_tableau).
En Panoramic, les tableaux ne sont pas des valeurs contigües. Les valeurs ne se suivent pas car il y a des données internes entre les éléments du tableau. Passer un pointeur, pourquoi pas, mais il va falloir connaître la structure des tableaux pour accéder aux valeurs. Je regarde cela. - Klaus a écrit:
- Le seul moyen est de créer un EDIT caché avec un évènement ON_CHANGE en Panoramic, puis de changer le contenu de cet EDIT par un API SendMessage avec WM_SETTEXT ce qui déclenche l'évènement ON_CHANGE. On utilise alors le contenu du EDIT pour déterminer ce que la DLL a bien voulu signaler.
Waou ! C'est pas mal comme système, mais compliqué. On va simplifier ça. - Klaus a écrit:
- avoir une commande ON_DLL_EVENT qui indiquerait un label - - - et dans la DLL, on appelerait l'API SEND_MESSAGE avec un code message à partir de WM_APP. Et Panoramic recevrait ce message dont le paramètre WPARAM contiendrait le numéro de l'évènement à déclencher.
L'API SendMessage, de mémoire, demande un handle pour identifier le récepteur. Pour que ON_DLL_EVENT fonctionne, il faudrait que l'application appelle au préalable une commande/fonction de la DLL pour lui passer un handle. Mais ON_DLL_EVENT est une bonne idée et je commence à coder quelque chose qui y ressemble. D'ailleurs le compilateur fonctionne un peu comme ça : il y a une messagerie à base de CopyData entre la DLL panoramic et le code généré par FreeBasic pour que la DLL puisse déclencher un événement de FreeBasic. _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Francis-mr
Nombre de messages : 186 Date d'inscription : 26/11/2012
| Sujet: Re: Nouvelle utilisation des bibliothèques Mer 9 Déc 2015 - 8:27 | |
| Moi qui ne suis pas utilisateur des DLL, peut-être vais-je changer ? Merci Jack pour ta constance. Peux-tu nous des nouvelles de l'avancement du compilateur ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 9 Déc 2015 - 10:39 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Nouvelle utilisation des bibliothèques Mer 9 Déc 2015 - 10:43 | |
| Très prometteur. @francis-mr: l'avantage sera justement que ce sera la librairie qui gérera les dll. Tu appelleras juste la commande ou la fonction y faisant appel. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Nouvelle utilisation des bibliothèques Mer 9 Déc 2015 - 13:21 | |
| Après tous ces éclaircissements, vous mettez ma patience en rude épreuve. Mais comme « la patience est la plus utile de toutes les vertus », je saurai patienter le temps qu'il faut. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Nouvelle utilisation des bibliothèques Ven 30 Sep 2016 - 10:46 | |
| Bonjour jack Peux tu nous dire où en est le développement de ces commandes stp? Est ce que le non-fonctionnement des fonctions sans paramètres sera bientôt levé? Car pour l'instant, ça nuit vraiment à l'intérêt de ces commandes(utilisation limité) On peut rechercher si une library est chargé en mémoire, mais on ne peut pas savoir si un mot-clé existe déjà. Peux tu ajouter une commande du genre 'LIBRARY_KEYWORD_EXISTS("mot-clé")'? Il y a un petit oubli; Dans certains cas, un message de déboguage apparait "Analyse_Ligne_Du Source. MOT-CLE EN LIBRAIRIE. ..." - Code:
-
dim hHeap%,pteur%
LIBRARY 1,"kernel32" function "allocate_structure%","HeapAlloc",1,"III","stdcall"
dll_on "kernel32.dll" hHeap% = dll_call0("GetProcessHeap") :' Obtenir le handle du heap du process appelé dll_off
pteur% = allocate_structure%(hHeap%,0,100) | |
| | | d.j.peters
Nombre de messages : 77 Age : 60 Localisation : Germany Date d'inscription : 31/07/2010
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 1 Mai 2018 - 16:25 | |
| [english] Does library "command" not work with real numbers ?
"IIII" works: LIBRARY 4,"opengl32" ' params: left%, bottom%, width%, height% COMMAND "glViewport" ,"glViewport",4,"IIII","stdcall"
but "RRRRRR" crashes ? ' params: left, right, bottom, top, zNear, zFar COMMAND "glFrustum","glFrustum",4,"RRRRRR","stdcall"
I use the latest version of Panoramic but in the HTML help files I can't find
sub end_sub, fnc end_fnc, library, command, function
DJ | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 1 Mai 2018 - 17:03 | |
| Librairy command/function are still in development. They only work with the Integers. Bugs you need to know: ' commands: ' 1 parameter : ok ' 2 parameters : ok ' 3 parameters : ok ' 4 parameters : ok ' 5 parameters : ok ' 6 parameters : ok ' functions: ' 0 parameter : bad---->crash ' 1 parameter : ok ' 2 parameters : ok ' 3 parameters : bad---->debug information appear ' 4 parameters : ok ' 5 parameters : bad---->crash ' 6 parameters : bad---->crash 'sub end_sub, fnc end_fnc, library, command, function' are news, and the release version is not published, which is why these commands are not in the help file. You can found these last undocumented commands here | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Mar 1 Mai 2018 - 17:42 | |
| Ouahh, dur-dur, tout ça ! Mais ça devrait être intéressant ! | |
| | | d.j.peters
Nombre de messages : 77 Age : 60 Localisation : Germany Date d'inscription : 31/07/2010
| Sujet: Re: Nouvelle utilisation des bibliothèques Mar 1 Mai 2018 - 17:59 | |
| @silverman thank you so much
now it's clear what is going on here here :-)
I run in to more trouble for example:
glTexImage2D(target%, level%, internal_format%, width%, height%, border%, format%, type%, pixels%)
needs 9 parameters dll_call0-6 nor command support it so I have to write it self with inline assembler.
In Panoramic does sub/fnc have a limit of number of parameters also ?
DJ | |
| | | Contenu sponsorisé
| Sujet: Re: Nouvelle utilisation des bibliothèques | |
| |
| | | | Nouvelle utilisation des bibliothèques | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |