منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : اجعل ملفات Dll جزء من مشروعك مع سؤال
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
جلبت لكم كود تستطيعون من خلالة جعل ملفات Dll جزء من المشروع ولكني لم أجربه

الطريقة :
شغل فيجوال بيسك دوت نت واعمل مشروع جديد سمه ماشئت
لقد اخترت كمثال الملف agsXMPP.dll
قم باضافة ملف الـ DLL الى My.Resources


تم توجه الى تبويب Application اضغط على الزر View Application Events


تظهر نافذة الكود كما في هذه الصورة :


قم بنسخ هذا الكود مع اسبدال كلمة NameDLL الى مايناسسب برنامجك
أخيرا ضع الكود هذا :

كود :
Private WithEvents MyDomain As AppDomain = AppDomain.CurrentDomain
      Private Function MyDomain_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles MyDomain.AssemblyResolve
          If args.Name.Contains("NameDLL") Then
              Return System.Reflection.Assembly.Load(My.Resources.NameDLL)
          ElseIf args.Name.Contains("NameDLL") Then
              Return System.Reflection.Assembly.Load(My.Resources.NameDLL)
          Else
              Return Nothing
          End If
          Return Nothing
      End Function
يصبح الكود بهذا الشكل :


انتهينا اعمل Builed اصبح برنامجك ملف واحد

وملف dll اصبح جزء لا يتجزء من برنامجك

هنا السؤال :
اذا كان لدي اكثر من ملف واحد ماهو الكود المستخدم لأكثر من ملف Dll وهل هذا الكود يعمل ؟؟

اتمنى لك من يجرب الكود يأتينا بالنتيجة

أكرر لم اجرب الكود ابدا وانما نقلته لكم
أولا عليك ان لا تنسي أن Resources تقبل جميع أنواع الملفات و تقوم بتحويل تلك الملفات الي object
ثانيا لكي تضمن عدم حدوث crash للبرنامج الخاص بك يجب أن تقف ب الماوس علي كل ملف و تجعله embeded resources
ثالثا لا تقرأ جميع الملفات مرة واحدة لأنه مع مرور الوقت ريما يقوم نظام التشغيل بالتخلص من البيانات الموجودة في ذاكرة الكمبيوتر و بالتالي برنامجك هنا قد يحدث له crash
رابعا في الكود الخاص بك فإن من كتب الكود وضع الملف في الكلاس My حتي يتم تحميله قبل الفورم و غالبا انت لا تحتاج تحميل ملفات dll قبل بداية البرنامج إلا في حالة وجود أهداف خاصة جدا لبدء ملف dll

إدرس ResourceManger Cllass ان كنت تنوي قراءة جميع الملفات من Resources دفعة واحدة ولكني لا أنصحك بهذا

الأفضل لك أن تضمن أولا ان لا يتم أخطاء أثناء تنفيذ الكود

مثلا تقرأ كل ملف علي حدة بهذا الاسلوب
PHP كود :
       Dim firstDll As Byte() = CType(My.Resources.ResourceManager.GetObject("اسم الملف بدون امتداده"), Byte()) 
 
ثم إبني مصفوفة لتضع بها جميع الملفات
PHP كود :
       Dim bytes As List(Of Byte()) = New List(Of Byte()) 


ثم تضيف لها الملفات
PHP كود :
       Dim bytes.Add(firstDll

فقط وبعد انتهائك من اضافة اي عدد تريده من الملفات
هنا تقوم بعمل Loop و تقرأ جميع البيانات في المصفوفة و تقوم بتحميلها باستخدام Assembly.Load