Этот пост может не применяться к 64 -битным системам для всего, что я знаю, но он работает на 32 -битных Windows ...
Я попробовал гендеф, и ему не удалось создать файл DEF. Уже решив эту проблему для моих собственных целей в начале писать DLL, я предлагаю использовать tiny_impdef.exe из TCC, который работает. (TCC = Tiny C Compiler, Fabrice Bellard, а затем, Grishka.) Что больше, в отличие от dlltool (и, возможно, гендеф), он работает, использует ли GCC -s для разрыва выходного DLL или нет!
Используйте dlltool для генерации файла библиотеки *.a из DEF, если использует GCC. TCC выполнит всю сборку DLL и EXE, используя всего две командные строки. У меня есть набор команд, которые позволят либо DLL, либо EXE быть построены с помощью GCC или TCC, причем все четыре возможных комбинации работают.
Пакетный файл ниже, для разграбления по желанию ... Я уверен, что это может быть улучшено, но, по крайней мере, он работает чисто, как есть.
@ECHO OFF
REM This system seems to work regardless of which compiler makes the DLL or the EXE. Try to simplify for GCC.
REM TCC Команды. Создает 3 файла, DLL и DEF, затем EXE. REM E: CODING TCC TCC.EXE -Shared E: Кодирование TCC Примеры test_dll test_dll.c -oe: coding tcc Примеры test_dll test_dll.dll rem e: кодирование tcc Tcc.exe e: coding tcc Примеры test_dll test_exe.c e: coding tcc Примеры test_dll test_dll.def -oe: coding tcc Примеры test_dll test_dll.exe
REM GCC Команды. ПРЕДУПРЕЖДЕНИЕ! Все еще нуждается в TCC Tiny_Impdef.exe! E: coding gcc bin gcc.exe -s -shared -ie -ie: coding gcc includ Test_dll test_dll.dll e: coding tcc "tiny_impdef.exe" e: coding tcc Примеры test_dll test_dll.dll> nul e: coding gcc mingw32 bin dlltool.exe -d E: coding tcc Примеры test_dll test_dll.def -le: coding tcc Примеры test_dll libtest_dll.a e: кодирование gcc bin gcc.exe -s -ie: кодирование gcc Include -mwindows e: coding tcc Примеры test_dll test_exe.c e: coding tcc Примеры test_dll libtest_dll.aoe: coding tcc Примеры test_dll test_dll.exe
Start E: Coding TCC Примеры test_dll test_dll.exe
Для полноты, вот код C для тестирования 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);
}
Извините за Gummidgisms, но мне пришлось с чего -то начать, и мне никогда не нравились Foo и Bar, или привет и мир ... вот Exe:
#include <windows.h>
void ZoodleWurdle();
void MangleWurzel();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ZoodleWurdle(); MangleWurzel();
return 0;
}