J'essaie d'appeler une fonction exportée par une dll de windows :
Code :
- typedef void (CALLBACK *LPFNDLLFUNC)(LPCSTR);
- LPFNDLLFUNC functionPtr = NULL;
- functionPtr = (LPFNDLLFUNC)GetProcAddress(hDll, "Control_RunDLL" );
- if (functionPtr == NULL) {
- MessageBox(NULL, "error getting proc address", "error", MB_OK | MB_ICONERROR);
- } else {
- functionPtr(path);
- }
|
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.