Насколько я знаю, этот пост может не относиться к 64-битным системам, но он работает в 32-битной Windows...
Я попробовал GENDEF, и мне не удалось создать файл DEF. Уже решив эту проблему для себя в начале написания DLL, я предлагаю использовать Tiny_impdef.exe от TCC, который работает. (TCC = Tiny C Compiler, Фабрис Беллард, а позже Гришка.) Более того, в отличие от DLLTOOL (и, возможно, GENDEF), он работает независимо от того, использовала 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:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.c -oE:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.dll REM E:\CODING\TCC\ TCC.EXE E:\CODING\TCC\EXAMPLES\Test_DLL\Test_EXE.c E:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.def -oE:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.exe
КОМАНДЫ REM GCC. ПРЕДУПРЕЖДЕНИЕ! Все еще нужен TCC Tiny_Impdef.exe! E:\CODING\GCC\BIN\GCC.EXE -s -shared -IE:\CODING\GCC\INCLUDE -mwindows E:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.c -oE:\CODING\TCC\EXAMPLES \Test_DLL\Test_DLL.dll E:\CODING\TCC\"Tiny_Impdef.exe" E:\CODING\TCC\EXAMPLES\TEST_DLL\TEST_DLL.DLL > NUL E:\CODING\GCC\MINGW32\BIN\DLLTOOL.EXE -d E:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.def -lE:\CODING\TCC\EXAMPLES\Test_DLL\libTest_DLL.a E:\CODING\GCC\BIN\GCC.EXE -s -IE:\CODING\GCC \INCLUDE -mwindows E:\CODING\TCC\EXAMPLES\Test_DLL\Test_EXE.c E:\CODING\TCC\EXAMPLES\Test_DLL\libTest_DLL.a -oE:\CODING\TCC\EXAMPLES\Test_DLL\Test_DLL.exe
НАЧАТЬ E:\CODING\TCC\EXAMPLES\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);
}
Извините за гуммиджизмы, но мне нужно было с чего-то начинать, и мне никогда не нравились foo и bar или hello и world... Вот EXE:
#include <windows.h>
void ZoodleWurdle();
void MangleWurzel();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ZoodleWurdle(); MangleWurzel();
return 0;
}
person
Community
schedule
05.11.2016