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.