Bonjour,
(Imaginons que) J'ai écrit une DLL (Win32) en C contenant deux fonctions et un programme (lui aussi en C) utilisant cette DLL.
(Imaginons que) Le source de cette DLL est (soit) :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <windows.h> #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT #endif void DLL_EXPORT test( void ) { MessageBoxA( NULL, "test", "DLL", MB_OK ); } BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved ) { if ( DLL_PROCESS_ATTACH == fdwReason ) { MessageBoxA( NULL, "DllMain", "DLL", MB_OK ); } return TRUE; }
Comment dois-je paramétrer C::B pour que la DLL obtenue après compilation/édition de liens exporte des symboles non décorés pour ces deux fonctions (donc "test" et "DllMain" et pas "_Z4testv" et "_Z7DllMainP11HINSTANCE__mPv@12"), afin de permettre :
- l'appel automatique de "DllMain()" lorsque ma bibliothèque est attachée à un procesus ;
- l'utilisation de ' GetProcAddress(hMod,"test") ' pour obtenir l'adresse de ma fonction dans un programme (au lieu de ' GetProcAddress(hMod,"_Z4testv") ').
Notes :
- je n'ai rien contre le fait que des symboles décorés soient exportés en plus des symboles non décorés ;
- je veux que mon programme charge explicitement la DLL avec LoadLibrary(), c'est non négociable (et ne me demandez pas pourquoi : c'est hors sujet) ;
- j'aurai une nette préférence pour les solutions ne nécessitant pas d'éditer un fichier ".def" à la main ;
- le compilateur utilisé est GCC (MinGW).
Merci d'avance
DS.
Partager