FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» API Windows
par Klaus Aujourd'hui à 3:21

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par pascal10000 Hier à 17:49

» Cartes de voeux, menus, etc.
par JL35 Hier à 17:48

» Mah-Jong européen new-look
par jjn4 Hier à 15:48

» a l'aide klaus
par Minibug Hier à 11:42

» KGF_dll - nouvelles versions
par Minibug Hier à 1:48

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Hier à 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

» anomalie
par Klaus Sam 9 Déc 2017 - 3:21

» hommage
par Jicehel Ven 8 Déc 2017 - 11:29

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 8 Déc 2017 - 10:43

» carte son
par Klaus Ven 8 Déc 2017 - 2:37

» mise a jour calculatrice
par joeeee2017 Mer 6 Déc 2017 - 22:19

» j'ai un petit problème
par JL35 Mer 6 Déc 2017 - 21:58

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Nouvelle utilisation des bibliothèques

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Nouvelle utilisation des bibliothèques   Mar 8 Déc 2015 - 23: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.


Rappel

Je 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étail

Dé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éel
fonction "fn%","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne un entier
fonction "fn$","fonction_dans_dll",1,"II","stdcall" définit que fonction_dans_dll retourne une chaine de caractères

Exemples :

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 - 22:54, édité 9 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 8 Déc 2015 - 23:54

Tu fais bien de modérer les ardeurs...
lol!

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... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 0: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 0: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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 9 Déc 2015 - 0:18

Je comprends vite, le problème est qu' il faut m' expliquer longtemps.
lol!

Ne t' inquiètes pas Jack, je m' adapterai.
Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10245
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 0: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 souhaits
a) 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ènements
actuellement, 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 1: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) study
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jack
Admin
avatar

Nombre de messages : 1771
Date d'inscription : 28/05/2007

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 10: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... Embarassed
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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
Francis-mr



Nombre de messages : 164
Age : 65
Localisation : Corrèze
Date d'inscription : 26/11/2012

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 10: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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://cfmr.e-monsite.com
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 9 Déc 2015 - 12:39

@ Klaus,



Cà y est ! le père noël est passé !
Mais tu vas devoir nous faire une série de cours sur les dlls  Wink

@ Jack,

Je refais mon stock de Doliprane ( html5, css et Js ont épuisé le stock  Laughing )
Mais tout cela est très prometteur car cela ouvre Panoramic vers d' autres dlls.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 12: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5613
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Mer 9 Déc 2015 - 15: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. sunny
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
silverman

avatar

Nombre de messages : 475
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: Nouvelle utilisation des bibliothèques   Ven 30 Sep 2016 - 11: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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Nouvelle utilisation des bibliothèques   

Revenir en haut Aller en bas
 
Nouvelle utilisation des bibliothèques
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment faire pour exporter des objets bibliothèques Dosh sous Artlantis Studio?
» Question sur le road book moto
» personnage 3D animés
» Nouvelle interface TV "Sensation" des Bbox standards: Où en sommes-nous ?
» Kaspersky utilisation ? ( résolu )

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Ce qui est en cours ...-
Sauter vers: