![]() |
|
إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll (/showthread.php?tid=25436) |
إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll - silverlight - 21-06-18 مقدمة: الهدف من هذا الموضوع هو توضيح كيفية استخدام الواجهات Interface في الربط بين ملف Dll و البرنامج الرئيسي هذه الفكرة تسمح للمبرمج باستخدام الواجهات Interface في اسدعاء الدوال بدون أن يظهر الكود الفعلي في البرنامج الرئيسي أيضا هذا الأسلوب يسمح للمبرمج بتشقيير ملف او ملفات Dll التي تحتوي علي الكود الفعلي الكود الفعلي يمكن الاحتفاظ به في صورة مصفوفة بايت في ملفات داتابيز أو في ملفات عادية أو يمكن اضافته الي Resources المشروع الرئيسي أو يمكن وضغه تحت فهرس معين اثناء عمل Setup للمشروع الرئيسي ثم يتم قراءة الكود باستخدام Reflection و نسترجع ما يقوم الكود الفعلي بتنفيذه عن طريق استخدام الواجهات Interface خطوات التنفيذ: التنفيذ يحتاج الي دراية تامة بكيفية كتابة Interface و كيفية كتابة كلاسات و دوال و روتينات مختلفة و بحرفية تامة ايضا الموضوع يحتاج الي الصبر من المبرمج حتي يتأكد أن الفكرة يتم كتابتها وإستخدامها يالشكل الصحيج من داخل المشروع الرئيسي 1- يتم بناء مشروع من النوع class library هذا المشروع سيحتوي علي Interface واحد أو أكثر من Interface وهذا طبقا لاحتياج المبرمج وبعد الانتهاء تماما من هذا المشروع وعمل Build له يتم اضافة نسخة منه الي المشروع الثاني و الثالث وذلك باستخدام Add Reference 2- يتم بناء مشروع ثاني من النوع class library وفي هذا المشروع يتم عمل Implementation للواجهات الموجودة في المشروع الأول وهنا يتم كتابة الكود الفعلي وبعد الانتهاء تماما من هذا المشروع وبعد عمل build له ممكن أن نقوم بتشفيير الملف او نستخدمه بشكل مباشر في المشروع الرئيسي بحيث نضيفه مثلا الي Resources المشروع الرئيسي و هذا متروك للمبرمج 3- أخيرا المشروع الرئيسي وفي هذا المشروع نستخدم الواجهات الموجودة في المشروع الأول في استدعاء الدوال من المشروع الثاني و بهذا نضمن أن الكود الفعلي لا يظهر في البرنامج الرئيسي ملاحظات: اولا : يجب ان نضع في الاعتبار استخدام مسميات مناسبة وغير مكررة للواجهات و للمشاريع بشكل عام ثانيا : يجب استخدام نفس Build او نفس version الخاص بالمشروع الأول في المشروعان الثاني و الثالث الكود: المشروع الأول 1- نفتح مشروعا جديدا من النوع Class Libraray و نعطيه اسما مناسبا و ليكن مثلا CairoCommon 2- نضيف لهذا المشروع واجهة Interface بإسم مناسب و ليكن مثلا ICairoFunctions 3- نكتب الدوال و الروتينات التي نريدها في الواجهة Interface 4- نقوم بعمل Build للمشروع وهنا سنحصل علي ملف اسمه CairoCommon.dll هذا الملف سنجده تحت الفهرس Debug الخاص بالمشروع الأول 5- ثم نضيف نسخة من هذا المشروع الي المشروع الثاني وتحديدا الي References المشروع الثاني وذلك ياستخدام Add Refreence 6- أخيرا نضيف نسخة من هذا المشروع الي المشروع الرئيسي وتحديدا الي References المشروع الرئيسي وذلك ياستخدام Add Refreence شكل الكود الخاص بالواجهة ICairoFunctions سيكون كالتالي أنا فقط أضفت دالة واحدة من أجل المثال و هي دالة سوف تقوم بتحويل مصفوفة من البايت الي String PHP كود : Public Interface ICairoFunctionsالمشروع الثاني 1- فتح مشروعا جديدا من النوع Class Libraray و نعطيه اسما مناسبا و ليكن مثلا CairoFunctions 2- نضيف للمشروع كلاسا اسمه CairoCommonFunctions 3- نقوم بعمل Imports لفضاء الأسماء الخاصة بالمشروع الأول 4- نقوم بعمل Implements للواجهة ICairoFunctions التي نحصل عليها في المشروع الأول 5- نكتب الكود الفعلي للدوال و الروتينان 6- نقوم بعمل Build للمشروع الثاني وهنا سنحصل علي ملف اسمه CairoFunctions.dll هذا الملف سنجد منه نسخة تحت الفهرس Debug الخاصة بالمشروع الثاني 7- هنا علينا ان نقرر ماذا نفعل بالملف هل نقوم بتشفييره أم لا أيضا علينا أن نقرر أين نحتفظ بهذا الملف مثلا ممكن نحتفظ به في ملف داتابيز او ماشابه ذلك في حالتنا هنا ومن أجل السهولة لا غير سوف أقوم بوضع نسخة من هذا الملف الي Resources الخاصة بالمشروع الرئيسي الكود التالي يوضح شكل الكلاس CairoCommonFunctions PHP كود : Imports CairoCommonالمشروع الرئيسي أخيرا و في المشروع الرئيسي نستخدم Reflection في عمل Load للمشروع الثاني ونستخدم الواجهة Interface الموجودة في المشروع الأول قي الربط بين المشروع الثاني و المشروع الرئيسي وبهذا لا يظهر الكود الفعلي في المشروع الرئيسي الكود التالي يوضح هذا PHP كود : Imports CairoCommonفي المرفقات ستجدون نسخة كاملة من المشروعات الثلاثة و هي كالتالي المشروع الأول : CairoCommon المشروع الثاني : CairoFunctions المشروع الرئيسي : Test_Cairo الموضوع هذا يمثل أساس جيد لأفكار كثيرة لكيفية اخفاء الكود الخاص بك أتمني أن يكون الموضوع مفيدا للبعض منكم تقبلوا تحياتي RE: إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll - YousefOkasha - 22-06-18 والله شرح فائق الروعة .. لكن كيف اقوم بتشفير ملف ال dll و عند تشغيل البرنامج يقوم بفتح التشفير و بعد غلق البرنامج .. يقوم بالتشفير مره آخري RE: إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll - elgokr - 22-06-18 (22-06-18, 02:13 AM)YousefOkasha كتب : والله شرح فائق الروعة .. تم الرد عليك مسبقاً بخصوص هذا الامر
راجع الرابط التالى
تحياتى لك
وتمنياتى لك التوفيق
RE: إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll - silverlight - 22-06-18 إقتباس :لكن كيف اقوم بتشفير ملف dll و عند تشغيل البرنامج يقوم بفتح التشفير و بعد غلق البرنامج .. جزء كبير من كتابة الكود يعتمد علي الإلهاء و الخداع أهم شئ في كتابة الكود انك أنت شخصيا تكون فاهم الكود مثلا ممكن تكتب الكود بطرق صعبة الفهم علي من قد يطلع علي الكود الخاص بك خاصة أن كتابة الكود بشكل مباشر يؤدي الي سرعة كسر الكود مثلا الكلاس التالي يقوم بالتشفيير ....... وهو كلاس مظهره صعب لكن باطنه سهل جدا PHP كود : Public Class MemoryDumperالكود التالي عبارة عن دالة توضح كيفية استخدام الكلاس PHP كود : Private Function Dump(bytes() As Byte, guard As Integer) As Byte()والكود التالي يوضح كيفية استخدام الدالة انا هنا اقوم بتشفيير مصفوفة بايت بغض النظر عن اصلها , الأصل هنا عبارة عن String PHP كود : Private dumpers As List(Of Integer) = New List(Of Integer) From {608561, 475623, 12345, 24688} PHP كود : Dim s As String = "omar"إن لم تستطع فهم كيف تتم عملية التشفيير وحدك اذن أنت أمامك الكثيير لتتعلمه لأنه جزء أساسي في التشفيير انك أنت فقط من يجب أن يكتب نظام التشفيير الخاص بك وبالتالي تكون حينها لديك القدرة علي كتابة الدوال و الروتينات المناسبة من أجل فك التشفيير ملحوظة أخيرة أنت لست في حاجة الي اعادة تشفيير الملفات عد اغلاق البرنامج الرئيسي تقبل تحياتي و شكرا لمرورك RE: إستخدام الواجهات Interface في إستدعاء الدوال و الروتينات من ملف Dll - sendbad100 - 22-06-18 السلام عليكم
مجهود جبار تشكر علية
اخي / silverlight
دائماً مبدع
الله يعطيك الصحة والعافية
. . . . . . . . . . . . . . . . . .
|