قد لا ينطبق هذا المنشور على أنظمة 64 بت لكل ما أعرفه ، لكنه يعمل على النوافذ 32 بت ...
حاولت Gendef ، وفشلت في إنتاج ملف DEF. بعد حل هذه المشكلة بالفعل لأغراض بلدي في البدء في كتابة DLL ، أقترح استخدام Tiny_impdef.exe من TCC ، والذي يعمل. (TCC = مترجم صغير C ، من تأليف Fabrice Bellard ، وبعد ذلك ، Grishka.) والأكثر من ذلك ، على عكس DllTool (وربما Gendef) ، فإنه يعمل ما إذا كانت GCC تستخدم -S لتجريد DLL الإخراج أم لا!
استخدم DllTool لإنشاء ملف Library *.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 أمثلة test_dll test_dll.c -oe: الترميز tcc أمثلة test_dll test_dll.dll rem e: coding tcc tcc.exe e: coding tcc أمثلة test_dll test_exe.c e: coding tcc aormles 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: coding gcc include -mwindows e: coding tcc Argtaments test_dll test_dll.c - test_dll test_dll.dll e: coding tcc "tiny_impdef.exe" e: coding tcc Armords test_dll test_dll E: coding tcc أمثلة test_dll test_dll.def -le: الترميز tcc أمثلة test_dll libtest_dll.a e: coding gcc bin gcc.exe -s -i: include -mwindows e: coding tcc أمثلة test_dll test_exe.c e: coding tcc stest_dll libtest_dll.a -
ابدأ e: الترميز 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 and Bar ، أو Hello and World ... إليك Exe:
#include <windows.h>
void ZoodleWurdle();
void MangleWurzel();
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ZoodleWurdle(); MangleWurzel();
return 0;
}