كيفية تنفيذ وظيفة RunDLL2 القابلة للاستدعاء؟
سؤال
أحاول كتابة exe تقوم أيضًا بتصدير الوظائف التي يمكن استدعاؤها باستخدام RunDLL32. هل هذا ممكن وإذا كان الأمر كذلك ، فلماذا لا يعمل هكذا؟
تابعت عن كثب نصيحة Microsoft حول هذا.
#define RUNDLL32(func) extern "C" __declspec(dllexport) void CALLBACK func(HWND hWnd, HINSTANCE hInst, LPSTR lpszCmdLine, int nCmdShow)
RUNDLL32(MyFunc)
{
MessageBox(0, 0, 0, 0);
}
ولكن عندما استدعاء مع
rundll32 myprog.exe,_MyFunc@16
Rundll32 تحطم/DEP ينطلق.
المحلول
يستخدم Rundll32.exe LoadLibrary () لتحميل الصورة القابلة للتنفيذ. من غير المحتمل أن ينجح هذا بشكل جيد بالنسبة إلى EXE ، لا يتوقع تحميله على عنوان ليس افتراضيًا. وهو ما يضمن حدوثه ، يحتل Rundll32.exe بالفعل هذا العنوان الافتراضي. لست متأكدًا مما إذا كان بإمكانك العبث بالرابط حتى لا يحذف سجلات النقل.
لكن لا تهتم بهذا النهج ، فقط قم بإنشاء DLL بدلاً من exe. ونقل الحجج الحقيقية إلى MessageBox (). ونعم ، استخدم ملف .def لإعادة تسمية الوظيفة المصدرة.
لا تنتمي إلى StackOverflow