Questo post potrebbe non applicarsi a sistemi a 64 bit per quello che so, ma funziona su Windows a 32 bit ...
Ho provato Gendef e non è riuscito a produrre un file DEF. Avendo già risolto questo problema per i miei scopi all'inizio di scrivere DLL, suggerisco di usare tiny_impdef.exe di TCC, che funziona. (TCC = Tiny C Compiler, di Fabrice Bellard, e successivamente, Grishka.) Inoltre, a differenza di Dlltool (e possibilmente Gendef), funziona se GCC ha usato -S per spogliare o no la DLL di uscita!
Utilizzare Dlltool per generare il file della libreria *.a dal def, se si utilizza GCC. TCC farà l'intera build di DLL ed EXE, usando solo due righe di comando. Ho una serie di comandi che consentirà di costruire la DLL o l'EXE da GCC o TCC, con tutte e quattro le possibili combinazioni che funzionano.
File batch di seguito, per saccheggiare a piacimento ... Sono sicuro che può essere migliorato, ma almeno funziona in modo pulito così com'è.
@ECHO OFF
REM This system seems to work regardless of which compiler makes the DLL or the EXE. Try to simplify for GCC.
Comandi REM TCC. Crea 3 file, dll e def, quindi exe. REM E: Coding Tcc Tcc.exe -Shared E: Coding Tcc Esempi Test_Dll Test_dll.c -oe: Coding Tcc Esempi test_dll test_dll.dll rem E: codifica tcc Tcc.exe E: codifica tcc esempi test_dll test_exe.c e: codifica tcc esempi test_dll test_dll.def -oe: codifica tcc esempi test_dll test_dll.exe
Comandi REM GCC. AVVERTIMENTO! Ha ancora bisogno di Tiny_impdef.exe di TCC! E: codifica gcc bin gcc.exe -s -shared -ie: codifica gcc include -mwindows e: codifica tcc esempi test_dll test_dll.c -oe: codifica tcc esempi Test_dll test_dll.dll e: codifica tcc "tiny_impdef.exe" e: codifica tcc esempi test_dll test_dll.dll> nul e: codifica gcc Mingw32 bin dlltool.exe -d E: codifica tcc esempi test_dll test_dll.def -le: codifica tcc esempi test_dll libtest_dll.a e: codifica gcc bin gcc.exe -s -ie: codifica gcc gcc Include -mwindows e: codifica tcc esempi test_dll test_exe.c e: codifica tcc esempi test_dll libtest_dll.a -oe: codifica tcc esempi test_dll test_dll.exee
Start e: codifica tcc esempi test_dll test_dll.exe
Per completezza, ecco il codice C per il test DLL:
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport)
DLL_EXPORT void ZoodleWurdle(){
MessageBox (0, "Wurdle", "Zoodle", MB_ICONINFORMATION);
}
DLL_EXPORT void MangleWurzel(){
MessageBox (0, "Mangled", "Wurzels", MB_ICONINFORMATION);
}
Mi dispiace per i Gummidgisms, ma ho dovuto iniziare da qualche parte, e non mi sono mai piaciuti Foo e Bar, o ciao e mondo ... ecco l'Exe:
#include <windows.h>
void ZoodleWurdle();
void MangleWurzel();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ZoodleWurdle(); MangleWurzel();
return 0;
}