FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Appel d'une fct DLL avec pointeur sur une structure Emptypar papydall Aujourd'hui à 2:21

» Gestion d'un système client-serveur.
Appel d'une fct DLL avec pointeur sur une structure Emptypar Klaus Hier à 23:59

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Appel d'une fct DLL avec pointeur sur une structure Emptypar Marc Hier à 12:14

» @Jack
Appel d'une fct DLL avec pointeur sur une structure Emptypar Jack Mar 30 Avr 2024 - 20:40

» trop de fichiers en cours
Appel d'une fct DLL avec pointeur sur une structure Emptypar papydall Lun 29 Avr 2024 - 23:39

» Une calculatrice en une ligne de programme
Appel d'une fct DLL avec pointeur sur une structure Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Appel d'une fct DLL avec pointeur sur une structure Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Appel d'une fct DLL avec pointeur sur une structure Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Appel d'une fct DLL avec pointeur sur une structure Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Appel d'une fct DLL avec pointeur sur une structure Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Dessine-moi une galaxie
Appel d'une fct DLL avec pointeur sur une structure Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Appel d'une fct DLL avec pointeur sur une structure Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Appel d'une fct DLL avec pointeur sur une structure Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Appel d'une fct DLL avec pointeur sur une structure Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Appel d'une fct DLL avec pointeur sur une structure Emptypar leclode Mer 17 Avr 2024 - 11:07

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-50%
Le deal à ne pas rater :
-50% Baskets Nike Air Huarache Runner
69.99 € 139.99 €
Voir le deal

 

 Appel d'une fct DLL avec pointeur sur une structure

Aller en bas 
4 participants
AuteurMessage
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 3:44

Suite à la question de Siverman, concernant l'utilisation d'une chaine de caractère comme buffer de données,
voici un exemple d'un appel à une fonction qui nécessite en paramètre, un pointeur sur une structure.

En cherchant un peu dans les DLL je suis tombé sur une petite fonction sympa : FlashWindowEx
Elle permet de faire clignoter une fenêtre (en arrière plan par exemple).
D'habitude, cette fonction permet à une application d'informer l'utilisateur qu'une opération est requise.

Elle est définie comme ceci en C++:

BOOL WINAPI FlashWindowEx(  _In_  PFLASHWINFO pfwi );

Elle nécessite en paramètre d'entrée, un pointeur sur une structure de données de type PFLASHWINFO
Code:
typedef struct {
  UINT  cbSize;      (32bits)The size of the structure, in bytes.
  HWND  hwnd;      (32bits dans notre cas) A handle to the window to be flashed. The window can be either opened or minimized.
  DWORD dwFlags;  (32bits) The flash status. This parameter can be one or more of the following values.
  UINT  uCount;     The number of times to flash the window.
  DWORD dwTimeout;  The rate at which the window is to be flashed, in milliseconds.
 } FLASHWINFO, *PFLASHWINFO;

Or ce genre de données n'existe pas en Panoramic ! Appel d'une fct DLL avec pointeur sur une structure 19
C'est là qu'intervient notre chaine de caractère qui va "simuler" notre structure.

Exemple :
Code:

' Exemple d'appel de fonction avec passage d'un pointeur sur une structure
'              Clignotement de la fenêtre de l’éditeur Panoramic

DIM ret% : ' retour de fct DLL
DIM cbSize%,hwnd%,dwFlags%,uCount%,dwTimeout% : ' Les membres de la structure FLASHWINFO
DIM FLASHW_CAPTION:FLASHW_CAPTION=1 : ' Type de clignotement (cf doc)
DIM FLASHWINFO$,pFLASHWINFO% : ' La chaine qui va servir de buffer ainsi que son pointeur

' -------- init de la structure ------------------
cbSize% = 5 * 4  : ' Taille de la structure -> 5 membres de 4 octets (variable : 32/64 bits)
hwnd% = HANDLE_FORM("PANORAMIC EDITOR") : ' le handle de la fenêtre que l'on veut faire clignoter
dwFlags% = FLASHW_CAPTION : ' Le type de clignotement  (cf. doc)
uCount% = 20  : ' le nb de fois que la fenêtre doit clignoter
dwTimeout% = 150 : ' La rapidité du clignotement (dans l'exemple 150ms)

FLASHWINFO$ = string$(cbSize%," ") : ' On déclare une chaine de caractères de même longueur que la structure

dll_on "kernel32.dll"

' On recupere l'adresse de base du buffer
' Pour rappel: la valeur retournée par ADR(chaine$) est un pointeur (adresse) sur la zone qui contient les caractères
LPEEK(ADR(pFLASHWINFO%),ADR(FLASHWINFO$)) : ' LPEEK(dest%,src%) on transfere le contenu de ADR(buffer) dans pPFLASHWINFO%

' Puis on met à jour la structure :
LPOKE( pFLASHWINFO%,cbSize%)
LPOKE( pFLASHWINFO%+ 4, hwnd%)
LPOKE( pFLASHWINFO%+ 8, dwFlags%)
LPOKE( pFLASHWINFO%+12, uCount%)
LPOKE( pFLASHWINFO%+16, dwTimeout%)
DLL_OFF : ' On a fini d'utiliser kernel32 avec les LPEEK et les LPOKE on clos la dll

' On lance le clignotement de la fenêtre :
dll_on "user32.dll"
ret% = DLL_CALL1("FlashWindowEx",pFLASHWINFO%)
DLL_OFF

' C'est tout !!
END

SUB LPEEK(Dest%,Src%)
  DIM_LOCAL ret%
  ret%=DLL_CALL3("RtlMoveMemory",Dest%,Src%,4) : ' Dest, Src, size
  FREE ret%
END_SUB

SUB LPOKE(Ad%,Value%)
  DIM_LOCAL v% : v%=Value%
  DIM_LOCAL ret%
  ret%=DLL_CALL3("RtlMoveMemory",Ad%,ADR(v%),4) : ' Dest, Src, size
  FREE v%: FREE ret%
END_SUB

Pour plus d'info sur FlashWindowEx voir ici
Plus d'info sur FLASHWINFO voir ici


Dernière édition par Nardo26 le Dim 26 Avr 2015 - 4:15, édité 2 fois
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: re   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 3:49

Je nage un peu mais l' effet est sympa Laughing .
Pas mal pour signaler la fin d' un traitement sur une fenêtre d' attente.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 3:53

Tu peux essayer de mettre la valeur 15 dans dwFlags% et -1 dans uCount% : la fenêtre clignotera tant qu'elle ne sera pas mise au 1er plan. (enlève le hide 0 pour tester) Appel d'une fct DLL avec pointeur sur une structure 07
Revenir en haut Aller en bas
http://nardo26.lescigales.org
papydall

papydall


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

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 5:21

C’est beau tout ça !

Nardo,  je pense que
Code:
 FREE v%: FREE ret%

n’est pas nécessaire, puisque ces variables sont déclarées locales :  à la sortie de la SUB elles seront détruites  ipso facto.

C'était juste pour pinailler, n'en tiens pas compte! Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 5:44

Merci Papydal de rectifier Appel d'une fct DLL avec pointeur sur une structure 07
Cela n'a pas toujours été le cas la libération des variables locales, non ?
J'ai loupé quelques épisodes...Appel d'une fct DLL avec pointeur sur une structure 64
En tout cas, cela va me simplifier la vie ! Very Happy
(J'aime pas cette commande où on ne peut pas faire FREE a$,t%,d)
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 10:31

Les fonctions et l'usage de la DLL sont très claires. Nardo tu devrais les envoyées en zip à Ygeronimi pour qu'il les ajoute dans les proc du mag, je trouve.
PS: en parlant du mag Nardo, tu devrais faire un article avec tout le travail que tu avais fait sur les arbres binaires (éventuellement refaire une passe sur le code car PAnoramic a un peu évolué depuis, mais tout le contenu reste valable dedans, qu'en penses-tu ?)
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 15:49

Il n'y a pas besoin de faire un zip : tout est là... Appel d'une fct DLL avec pointeur sur une structure 07

Par contre, je viens de me rendre compte que la modification du contenu du buffer met un peu le bronx pour une 2eme utilisation.
(L'entête de la chaine n'est plus en concordance et je ne connait pas encore les conséquences)

Pour les arbres binaires, j'ai pas compris : tu veux que je reécrive l'article qu'il y a sur mon site ? Appel d'une fct DLL avec pointeur sur une structure 64
C'est clair, qu'il faut que je dépoussière un peu ce code... Appel d'une fct DLL avec pointeur sur une structure 10
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 16:01

oui, c'est ça pour qu'en plus de ton site, il soit sur le mag (en fait Ygeronimi est très timide. Il ne vole rien, il attend que l'on dépose ce que l'on souhaite publier dans le mag sur son Webdav ... Wink )
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 16:46

Vole ?
Si c'est sur le net, c'est pour être partagé. Appel d'une fct DLL avec pointeur sur une structure 07

Si quelque chose l’intéresse pour le mag, il n'a qu'à se servir : c'est fait pour ça.
Pour les arbres AVL, il faut d'abord que je jette un coup d'oeil pour voir si des choses peuvent être amélioré.

Je regarde actuellement pour essayer de faire de l'allocation dynamique.
Cela éviterai de corrompre les chaines de Panoramic et cela serait peut être utile pour gérer des piles dans le cas d'appels récursifs.
Revenir en haut Aller en bas
http://nardo26.lescigales.org
papydall

papydall


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

Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure EmptyDim 26 Avr 2015 - 16:56

On ne vole rien.
On est chez soi, donc on s’en sert bien de ses biens !
Citation :
Si c'est sur le net, c'est pour être partagé.  

Bravo Nardo vingt-six.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Appel d'une fct DLL avec pointeur sur une structure Empty
MessageSujet: Re: Appel d'une fct DLL avec pointeur sur une structure   Appel d'une fct DLL avec pointeur sur une structure Empty

Revenir en haut Aller en bas
 
Appel d'une fct DLL avec pointeur sur une structure
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Bug avec le signe '=' dans les paramètres d'appel d'un SUB
» [Résolu] Appel d'un script cmd avec passage de paramètres
» Des dlls compilées a la demande en FreeBasic, avec l'appel
» POINTEUR INCREMENTAL
» Structure spirale n°1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Les inutilitaires-
Sauter vers: