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 |
|
|
| Mise en ligne de mes fonctions dans une DLL | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 14:24 | |
| Bonjour à tous, Je viens de mettre la première version réelle de KGF.dll en ligne sur mon site; voici le lien: http://membres.multimania.fr/klaus/Bienvenue.1.htmlCette DLL contient pour le moment 14 fonctions, dont la fonction de copie du contenu d'un mémo dans le presse-papier et des fonctions de manipulation sur des valeursbinaires en 8, 16 et 32 bits. Allez voir la page info concernant cette DLL pour le détail des routines. Cette DLL évoluera au gré des nouvelles fonctions que j'ajouterai; chaque ajout sera documenté dans la page d'information. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 14:39 | |
| Bonjour Klaus, Je ne suis pas familier des DLL, juste une petite précision: je suppose que la dll doit être présente dans le même répertoire que le programme Panoramic à exécuter, et doit donc être distribuée avec ledit programme ? Non, apparemment ce n'est pas aussi simple, il faut bien aussi la déclarer quelque part dans Panoramic, quel est le mode d'emploi ? Bon, après tâtonnements, je finis par obtenir quelque chose: - Code:
-
dim res% DLL_ON "C:\LANGAGES\PANORAMI\KGF.28.dll": ' charge la dll en mémoire res% = DLL_CALL0("GetPrinterCount"): ' appel d'une fonction, sans paramètres DLL_OFF: ' libère la mémoire print res% end Apparemment il faut mettre le chemin complet de la dll | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 14:58 | |
| salut, Pour les DLL, c'est très simple. Tu places la DLL où tu veux, en principe, car dans ron programme Panoramic, tu dois l' ouvrir avec l'instruction suivante: - Code:
-
DLL_ON "nom_du_fichier_DLL"
Si tu ne spécifie pas de chemin d'accès avec le fichier (comme dans mon programme test), la DLL doit être dans le répertoire du programme. Mais tu peux mettre le chemin que tu veux, et tu la places où tu veux (dans c;\windows\system32 par exemple). L'important, c'est de spécifier le chemin correct. Quand tu n'as plus besoin de la DLL, ou afin de pouvoir en utiliser une autre, tu fais - Code:
-
DLL_OFF
et elle est libérée de la mémoire. Une subtilité: lorsque tu exécutes un programme Panoramic directement sous l'éditeur, ce n'est pas ton programme .bas qui est le "programme actif" et qui détermine le répertoire par défaut, mais l'éditeur lui-même. Donc, si tu veux placer ta DLL systématiquement dans le répertoire du programme lorsqua ton programme sera converti en exe et distribué, il faut également copier cette DLL dans le répertoire de l'éditeur Panoramic afin que celui-ci la trouve sans la spécification d'un chemin d'accès. Sinon, il y a bien sûr la possibilité de faire ce que tu fais, mais tu te bloques sur un répertoire codé dans le programme. Choisis un répertoire spécifique aux DLL et place-la à cet endroit, ou ne mets pas de chemin d'accès et copie la DLL dans le répertoire de l'éditeur Panoramic pour les tests et dans le répertoire de ton programme exe pour l'exploitation. P.S. Le nom de ma DLL est en principe KGF.dll. Le ptit rajout ".28" au milieu est généré automatiquement par mon outil de création de site web; on peut fort bien enlever cela en renommant la DLL. On peut d'ailleurs la nommer comme on veut: ce qui importe, c'est de spécifier les noms des fonctions de façon exacte en respectant les majuscules et miniscules; le nom de la DLL elle-même n'a aucune importance. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 15:02 | |
| Compris, merci Klaus, c'est bien clair (j'avais édité pour rajouter le DLL_OFF).
Effectivement, je mettais la dll dans le répertoire de mes sources, mais si je ne donne pas le chemin complet il la cherche dans le répertoire de l'éditeur, c'est à dire dans C:\Program Files\ etc... et évidemment il ne la trouve pas. C'est ce qui me chagrinait. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 17:37 | |
| J'ai fait un petit outil de test des fonctions de la DLL. Il s'exécute directement sous l'éditeur, avec la DLL étant copiée dans le répertoire de l'éditeur (voir les posts ci-dessus). Voici le programme: - Code:
-
rem ************************************************************** rem * * rem * test_KGF_DLL.bas * rem * * rem * Ce programme permet de tester toutes les fonctions de * rem * la DLL KGF.dll. * rem * * rem * ATTENTION: il est essentiel de specifier le nom de la * rem * routine tel quel, en respectant la casse indiquée ! * rem * * rem **************************************************************
label copier label n_imp,exit,exec_bin dim res%, n_objet%, binfunc% , binsize%, binval%, bincnt%
rem ******************************************************* rem * * rem * La ligne suivante sert à choisir le mémo * rem * * rem ******************************************************* n_objet% = 1
alpha 11 :caption 11,"Mémo source" :top 11,20 :left 11,10 memo 1 :top 1,40 :left 1,10 button 2 :top 2,150 :left 2,20 :width 2,150 caption 2,"Copier dans Presse-Papier" :on_click 2,copier alpha 13 :caption 13,"Mémo destination" :top 13,20 :left 13,250 memo 3 :top 3,40 :left 3,250 alpha 14 :caption 14,"Copier par le bouton à gauche, puis:" :top 14,150 :left 14,250 alpha 15 :caption 15,"Utiliser ctrl/V dans mémo destination !" :top 15,170 :left 15,250
button 21 :top 21,200 :left 21,10 :caption 21,"N. Imprimantes" :on_click 21,n_imp
container_option 30 :top 30,230 :left 30,10 :width 30,130 :caption 30,"Fonction" option 31 :parent 31,30 :top 31,20 :left 31,10 :caption 31,"Rotation à gauche" option 32 :parent 32,30 :top 32,40 :left 32,10 :caption 32,"Rotation à droite" option 33 :parent 33,30 :top 33,60 :left 33,10 :caption 33,"Décalage à gauche" option 34 :parent 34,30 :top 34,80 :left 34,10 :caption 34,"Décalage à droite"
container_option 40 :top 40,230 :left 40,150 :width 40,130 :caption 40,"Taille" option 41 :parent 41,40 :top 41,20 :left 41,10 :caption 41," 8 bits" option 42 :parent 42,40 :top 42,40 :left 42,10 :caption 42,"16 bits" option 43 :parent 43,40 :top 43,60 :left 43,10 :caption 43,"32 bits"
alpha 45 :top 45,240 :left 45,320 :caption 45,"Valeur" alpha 46 :top 46,240 :left 46,460 :caption 46,"Nombre" edit 35 :top 35,260 :left 35,320 edit 36 :top 36,260 :left 36,460 button 37 :top 37,290 :left 37,415 :caption 37,"Exécuter" :on_click 37,exec_bin alpha 39 :top 39,320 :left 39,350 :caption 39,"Résultat:" edit 38 :top 38,320 :left 38,400
button 24 :top 24,200 :left 24,420 :caption 24,"Sortir ICI !" :on_click 24,exit
binfunc% = 0 :binsize% = 0 :bincnt% = 0 :dll_on "KGF.dll"
end
exec_bin: if numeric(text$(36))=1 bincnt% = val(text$(36)) else message "Il faut un nombre numérique !" :return end_if if numeric(text$(35))=1 binval% = val(text$(35)) binfunc% = checked(31) + 2*checked(32) + 3*checked(33) + 4*checked(34) binsize% = checked(41) + 2*checked(42) + 3*checked(43) if binsize%=1 if binfunc%=1 then binval% = dll_call2("bin_BROL",binval%,bincnt%) if binfunc%=2 then binval% = dll_call2("bin_BROR",binval%,bincnt%) if binfunc%=3 then binval% = dll_call2("bin_BSHL",binval%,bincnt%) if binfunc%=4 then binval% = dll_call2("bin_BSHR",binval%,bincnt%) end_if if binsize%=2 if binfunc%=1 then binval% = dll_call2("bin_WROL",binval%,bincnt%) if binfunc%=2 then binval% = dll_call2("bin_WROR",binval%,bincnt%) if binfunc%=3 then binval% = dll_call2("bin_WSHL",binval%,bincnt%) if binfunc%=4 then binval% = dll_call2("bin_WSHR",binval%,bincnt%) end_if if binsize%=3 if binfunc%=1 then binval% = dll_call2("bin_ROL",binval%,bincnt%) if binfunc%=2 then binval% = dll_call2("bin_ROR",binval%,bincnt%) if binfunc%=3 then binval% = dll_call2("bin_SHL",binval%,bincnt%) if binfunc%=4 then binval% = dll_call2("bin_SHR",binval%,bincnt%) end_if text 38,str$(binval%) else message "Il faut une valeur numérique !" end_if return
exit: dll_off :terminate
n_imp: res% = dll_call0("GetPrinterCount") message str$(res%) return
copier: rem ************************************************************** rem * * rem * Les 4 lignes suivantes effectuent la copie * rem * du memo n_objet% intégralement dans le presse-papier ! * rem * Le reste du code n'est que le programme de démo. * rem * Le dll_on est fait au début du programme ! * rem * * rem ************************************************************** set_focus n_objet% rem dll_on "KGF.dll" res% = dll_call0("ClipboardCopy") rem dll_off rem ************************************************************** rem * * rem * fin du code utile * rem * * rem **************************************************************
return
Amusez-vous bien ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 18:32 | |
| Ta dll se télécharge sous KGF.28.dll (?), il faut donc préalablement la renommer en KGF.dll | |
| | | Invité Invité
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 19:10 | |
| Klaus: Il y a une chose que je ne comprend pas très bien: il faut afficher un nombre et une valeur ??? Pourquoi? Je veux seulement faire une rotation d'un nombre. La sélection du texte à copier marche, et je vais m'en servir. Tu devrais déporter la procédure exit à la fin, là où il n'y a pas de RETURN, ceci a pour effet de ne pas faire sursauter Panoramic. Continue à nous étonner. Si ça continu, on va te faire faire nos programmes. @+
Excuses moi, il suffit de regarder le source pour comprendre. |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL Sam 13 Mar 2010 - 19:58 | |
| Pour JL35:
Oui, on peut/il faut renommer cette DLL. Comme je l'ai dit dans un post précédent, c'est un truc de mon générateur de site web; je trouverai la parade.
Pour Cosmos70:
La valeur est ce qui subit la transformation, et le "nombre" est le nombre de bits pour le décalage ou la rotation.
Cordialement Klaus | |
| | | Contenu sponsorisé
| Sujet: Re: Mise en ligne de mes fonctions dans une DLL | |
| |
| | | | Mise en ligne de mes fonctions dans une DLL | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |