بارك الله فيك اخي على اجابتك...
بخصوص:
(09-06-2020, 07:09 AM)ExCodeMaker كتب : بالنسبة للاسألة، التسمية متوافقة مع الغرض، فالدالة هذا هو الهدف منها والمتغير يشير الى موقع الدالة في الذاكرة.
الاشكال هنا هو اعتمادك على تسمية قد تسبب
اعتراضات خلال مرحلة البناء تسمية الدالة
GetProcessId مع وجود دالة
تابعة للنظام
بنفس التسمية مع احترام الحروف الكبيرة و الصغيرة.
error C2373: 'GetProcessId': redefinition; different type modifiers
عند تخصيص البناء
x86
warning C4273: 'GetProcessId': inconsistent dll linkage
عند تخصيص البناء
x64
و عند الانتهاء من بناء التطبيق يتم
رغما عنا اضافة الدالة
GetProcessId في جدول التصديرات
Exports
قم اخي بفحص جدول التصديرات للملف الناتج عندك.
الحل:
من
GetProcessId الى
getProcessId تفي بالعرض.
نفس الشئ في اعتماد تسمية المتغيرات:
من
LoadLibraryA الى
lpLoadLibraryA مثلا، الحرص فقط على عدم التسمية باسماء قد تسبب اعتراضات او قد تؤدي الى سلوك خارجي مثل
اضافة الدالة الى جدول التصديرات (حالة التطبيق خاصتك)
(09-06-2020, 07:09 AM)ExCodeMaker كتب : بالسنبة للتعرف، ما شاء الله على قوة ملاحظتك، فانا قصدت ذلك لانه لا يوجد بلغة C تعريف DWORD وانما هو مقتبس من الاسمبلي وهو عبارة عن Alias ، لذا احببت الانحياز لاصل اللغة.
في الأصل،
unsigned long و
DWORD (
احرف كبيرة) هما نفس
الشئ:
typedef unsigned long DWORD;
الاشكال هو
منهجي في طريقة كتابة تعريف نفس الدالة بكتابة
مختلفة في نفس السورس حتى و ان كان الاختلاف
شكلا و ليس
مضمونا.
بالمناسبة جربت المثال و
عمل عندي بنجاح، فقط:
1- يجب تشغيل
notepad كمسؤول لكي يتم منحه صلاحيات الكتابة في السواقة "
C"
2- و بما ان متسوى
notepad اصبح مستوى مسؤول، فانه طبعا يجب رفع مستوى تشغيل التطبيق بنفس المستوى.
احببت ارفاق الملفات (لم اغير اي شئ في السورس الأصلي سوى تسمية الدالة
getProcessId )(
x86 و
x64) التنفيذية، تشغيلها لا يحتاج الى
dependencies مثبتة على النظام لكي تشتغل.