NI Home
Cart Achats | Aide
Hello Events Academic NI Developer Zone Support Solutions Products & Services Contact NI MyNI
You are here: 
NI Home > NI Developer Zone > NI Discussion Forums


Répondre
Member
Benji88_74
Envois : 15
0 Compliments
Solution approuvée

Fermeture Labview à cause de DLL

Bonjour à tous,

 

Je souhaite fermer la calculatrice windows grâce à Labview, j'ai alors suivi le topic ci dessous.

 

http://forums.ni.com/t5/Discussions-de-produit-de-NI/fermeture-d-un-programme-lancer-avec-un-bat/m-p...

 

Alors cela fonctionne très bien au detail près que Labview se ferme aussi. Cependant aucun autre logiciel à part la calculatrice et Labview.

Je vous joins mon VI.

 

Merci d'avance.

 

Bon week end

 

 

Active Participant
ouadji
Envois : 933

Re : Fermeture Labview à cause de DLL

[ modifié ]

Dans la configuration de la fonction "SendMessage" (à droite)

va voir dans Configure/Fonction/Calling convention .... tu as mis "C", pas bon ça ... c'est "stdcall WINAPI"

 

avec la convention "C" les paramètres ne sont pas passés dans le même ordre.

En fait ... tu fermais bien la calculatrice ... et ensuite tu crashais LV.

 

Accessoirement, pour la fonction FindWindow, pour IpszClassName, tu as mis un I32 ... c'est un U32 qu'il faut.

(mais ça, c'est moins grave)

 

et encore accessoirement ... oui, c'est bien 16 qu'il faut mettre ...0x10 en hexa

mais cela ne correspond pas à un WM_QUIT, mais à un WM_CLOSE.

(WM_QUIT, c'est 0x12)

Active Participant
ouadji
Envois : 933
0 Compliments

Re : Fermeture Labview à cause de DLL

voici un exemplaire qui fonctionne

 

original5.png

Member
Benji88_74
Envois : 15
0 Compliments

Re : Fermeture Labview à cause de DLL

Merci de ra réponse. C'est effectivement cela.

 

Pourrais tu me dire la différence entre le choix du code C et de stdcall WINAPI (je suppose que cela vient de la manière dont est codé la DLL) ?

 

En tout cas encore merci !

 

Benjamin

Active Participant
ouadji
Envois : 933

Re : Fermeture Labview à cause de DLL

Il y a 2 grandes conventions d'appel d'une fonctions.

celle utilisée en C, soit aussi appelée la convention "__cdecl"

et celle utilsée pour l'appel des fonctions WIN32 API, aussi appelée "__stdcall"

 

Pour appeler une fonction, il faut (en général) passer des arguments.

Cela se fait via la Pile

 

push arg_1     (dword - 32bits)

push arg_2     (dword - 32bits)

call fonction

 

Quand tout est terminé, il faut ré-équilibrer la Pile. (la Pile va du haut vers le bas, c'est une FIFO)

 

Avec la convention _cdecl (C), c'est la code appelant qui rétabli la PIle.

 

       push arg_1

       push arg_2

       call fonction

              add    esp,8         // 8=2*4 ... 4: 4 bytes = 4*8 = 32bits

                                        // add esp,8 ... ou ... pop arg_2,pop arg_1

              la suite

-----------------------------------------

fonction:  ma fonction

              .....

              ret

-----------------------------------------

 

Avec la convention __stdcall (WINAPI), c'est la fonction appelée elle-même qui rétabli la Pile.

 

       push arg_1

       push arg_2

       call fonction

       la suite

 -----------------------------------------

fonction:  ma fonction

              .....

              ret       8              // ret 8 = ret ... et ensuite ... add esp,8

-----------------------------------------

 

Difficile d'expliquer davantage sans plonger dans le langage Assembleur

et les instructions processeurs elles-mêmes.

 

Active Participant
ouadji
Envois : 933
0 Compliments

Re : Fermeture Labview à cause de DLL

me suis trompé.

La Pile des processeurs, ce n'est pas une Pile FIFO, mais LIFO (Last IN First Out)

En consultant ce site, vous en acceptez les Conditions d'utilisation. Veuillez les lire attentivement avant d'accéder à une quelconque partie du site. Veuillez suivre ce lien pour en savoir plus sur la politique sur les droits d'auteur de ni.com.
Mon Profil | Confidentialité | Conditions d'utilisation | Contacter NI © 2011 National Instruments Corporation. All rights reserved.    |    Envoyer cette page Envoyer cette page