dll, import et calling convention... [win32] - C - Programmation
Marsh Posté le 29-10-2003 à 16:28:27
Ca peut oeut être t'aider:
http://delphi.about.com/library/code/ncaa062403a.htm
Marsh Posté le 29-10-2003 à 16:33:17
effectivement
Marsh Posté le 29-10-2003 à 16:35:05
ça dépend de la convention d'appel de la fonction de la DLL, normalement elle doit être déclarée comme ceci :
extern "C" __declspec( dllexport ) int __stdcall fonction()
en tout cas, moi je fais comme ça et j'ai jamais eu de pépin
Marsh Posté le 29-10-2003 à 16:43:42
Le problème c'es justement que je n'ai aucune idée de la façon dont est déclarée la fonction.
Bon donc j'ai fais ça :
Code :
|
Plus de message d'erreur (c'est deja ça), mais il ne se passe rien. Normalement c'est sensé ouvrir la fenêtre "ajout/supression de programmes", et là nada
Marsh Posté le 29-10-2003 à 16:49:11
regarde ici, j'avais donné une explication de l'utilisation de GetProcAdress()
http://forum.hardware.fr/forum2.ph [...] 98#t467225
edit: je suis sur que ça vient du fait que t'as pas encadré ton pointeur de fonction avec une parenthèse :
(functionPtr)(NULL, hInstance, "appwiz.cpl", SW_SHOW);
Marsh Posté le 29-10-2003 à 17:00:07
Harkonnen a écrit : regarde ici, j'avais donné une explication de l'utilisation de GetProcAdress() |
Pour le fonctionnement de GetProcAdress(), j'avais à peu près compris. C'est au niveau de la syntaxe et des pointeurs de fonction que j'ai du mal.
Et avec les parenthèses ça marche pas plus. Je me demande si j'utilise la bonne fonction ; shell32.dll exporte aussi une Control_RunDLLA... Pourtant avec rundll32 ça passe comme ça...
Marsh Posté le 29-10-2003 à 17:26:20
C'est bon ça marche ! En fait c'était à moi de créer une fenêtre, et de passer le hwnd de cette fenêtre à la fonction. Ca ouvre des perspectives d'ailleurs ; on peut intégrer les éléments du panneau de config dans une application...
Marsh Posté le 30-10-2003 à 08:50:44
R3g a écrit : C'est bon ça marche ! En fait c'était à moi de créer une fenêtre, et de passer le hwnd de cette fenêtre à la fonction. Ca ouvre des perspectives d'ailleurs ; on peut intégrer les éléments du panneau de config dans une application... |
Ben ouai, c ce qui était dit sur la page que je t'ai fillé il me semble.
EDIT: Y aaurait pas plus simple, avec une interface COM par exemple?
Marsh Posté le 30-10-2003 à 12:20:40
LetoII a écrit : |
Ca ne ma'a pas semblè évident non. Surtout qu'après expérimentation, le hwnd que je passe, je ne sais pas à quoi il sert, puisque la fenetre que je crée n'ai pas utilisée et qu'il en recrée une autre.
Pour l'interface COM, je sais pas, c'est mon premier prog pour windows alors bon...
Marsh Posté le 29-10-2003 à 16:14:05
J'essaie d'appeler une fonction exportée par une dll de windows :
En mode debug, je me prends un message disant "The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."
En mode release, l'appel passe, mais ne fait pas ce que j'attends de lui, et je me prends une access violation _après_.
J'ai essayé en changeant la convention d'appel dans le typedef, sans effet.
Voila là ou ca devient drôle : la fonction que je veux appeler est dans shell32.dll. Elle n'est bien sur pas documentée par M$, et donc je ne suis sur ni du type de retour, ni du nombre et du type des arguments...
La seule chose que je sais, c'est qu'en lançant un rundll32 shell32.dll,Control_RunDLL "appwiz.cpl" e, ligne de commande, ça marche.
Quelqu'un a une idée, où je suis en train de tenter un truc impossible ?
---------------
Au royaume des sourds, les borgnes sont sourds.