From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
le 05-05-2012 02:39 PM
Bonjour à tous,
Je souhaite fermer la calculatrice windows grâce à Labview, j'ai alors suivi le topic ci dessous.
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
Résolu ! Accéder à la solution.
05-05-2012 04:33 PM - modifié 05-05-2012 04:37 PM
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)
le 05-05-2012 04:52 PM
le 05-06-2012 11:27 AM
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
le 05-06-2012 12:35 PM
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.
le 05-09-2012 02:14 AM
me suis trompé.
La Pile des processeurs, ce n'est pas une Pile FIFO, mais LIFO (Last IN First Out)