الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

kill dll from prcesee

بدأه aymanmoftah في 17 مارس 2010 · 10 رد · 1,259 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لقد قمت بعمل

dll

من نوع ComRegister

واستدعيتها من خلال

obj=createobject('mydll.main")

ولكن للاسف عند عمل dispose لها

وعمل rebuild

ل

DLl Project

يعطي ان البرنامج مستخدم في الذاكرة

كيف يمكن عمل kill process for this object

بالعلم استخدمت الدوال

obj=nothing

obj.dispose()

والتي هي دالة عملت لها اشتقاق من idisposable

الرجاء الحل

تم تعديل هذه المشاركة بواسطة aymanmoftah في 17 مارس 2010 في 15:51

#2

كائنات COM لأ يتم تحريرها من الذاكره بإستخدام Dispose و Nothing مثل كائنات الدوت نت و لكن لابد من عمل decrement للكائن فى الذاكره ليستطيع نظام التشغيل تحريره و ذلك يتم عن طريق استدعاء الداله Marshal.ReleaseComObject و تمرير الكائن لها و بعد ذلك يمكنك استخدام Nothing مع المتغير الذى يشير للكائن.

من الأفضل استخدام Activator.CreateInstance عن CreateObject.

و الله ولى التوفيق

مدونتي: C++ Tips and Tricks

#3

شكرا على ردك ولك كيف يمكن استخدام هذه الطريقة وهل

يوجد اختلاف عن الطريقتين

createobject

Activator.CreateInstance

وما الفرق بينهم

وعندما استخدمت الامر

Marshal.ReleaseComObject

اعطى خطأ التالي

the object type must be comobject

بالرغم ان المشروع من نوع

comopject

من خصائص المشروع

from comile properties===>

register for cominterop

from application prperties ==>

make assembly com visible

تم تعديل هذه المشاركة بواسطة aymanmoftah في 18 مارس 2010 في 12:03

#4

هل قمت بصناعة مكتبتك من خلال الدوت نت ام من خلال الـ C++/C ؟

مدونتي: C++ Tips and Tricks

#5

من خلال

vb.net2008

#6

لماذا تقوم بعمل COM DLL من الفيجوال بيسك لتستخدمها داخل الفيجوال بيسك؟

عندما قمت بإستخدام الأمر CreateObject مع الـ ProgID هل تم ارجاع نسخه من الفئه؟

هل قمت بتحديد CLSID و InterfaceID للفئه التى ستصدر لـ COM ؟

هل قمت بتسجيل الـ DLL داخل الريجسترى بإستخدام Regasm.exe؟

قم بمراجعة هذا الرابط لمزيد من المعلومات عن كيفية تصدير المكتبات لـ COM

اقتباس
هل يوجد اختلاف عن الطريقتين createobject و Activator.CreateInstance وما الفرق بينهم

الداله CreateObject موجوده داخل الفئه Interaction الموجوده بـ Micorosft.VisualBasic.dll و هى ضمنيا بعد مجموعة من العمليات على القيم المرره لها تقوم بإستدعاء الداله Activator.CreateInstance، ايضا الداله CreateObject موجوده بالدوت نت كـ Backward Compatibility مع Visual Basic 5-6 Runtime Library و ذلك حتى اذا قمت بتحويل مشروع من اصدارات اقل إلى الدوت نت يتاح البديل للدوال القديمه بمماثل لها جديد و لكن اذا بدءت مشروع جديد داخل الدوت نت فالأفضل ان تستخدم فئات الدوت نت لإن كل الدوال الموجوده بالـ Microsoft.VisualBasic.dll تستدعى دوال موجوده بالـ Dot Net Core Framework.

كلما قل عدد الـ References داخل مشروعك كلما قل حجم الملف التنذى الناتج و كلما تم تنفيذه اسرع.

اقتباس
وعندما استخدمت الامر Marshal.ReleaseComObject اعطى خطأ التالي the object type must be comobject بالرغم ان المشروع من نوع comopject من خصائص المشروع

الخطأ المعاد من الداله Marshal.ReleaseComObject يعنى ان الكائن المرر لها ليس COM Object و بالتالى هى لا تستطيع تحريره من الذاكره.

تصدير المشروع لـ COM لا يعنى ان محتوياته (واجهات و فئات و دوال) تم تصديرها هى ايضا كـ Com Types.

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Muhammad alaa في 18 مارس 2010 في 16:44

مدونتي: C++ Tips and Tricks

#7

انا كتبت المكتبة من خلال vb.net واستخدمها في vb.net

هل بالامكان مثال بسيط على ما كتبته

كي اعرف ما هو الاسلوب الصحيح لعمل مكتبة dll

من هذا النوع واستخدمها ك

createobject

#8

الأمر بسيط فقط بدلا من اضافة Class داخل المشروع قم بإضافة Com Class

مدونتي: C++ Tips and Tricks

#9
Muhammad alaa كتب:

الأمر بسيط فقط بدلا من اضافة Class داخل المشروع قم بإضافة Com Class

لقد قمت بعمل مشروع جديد من

windows class

ثم قمت بعمل اضافة

com class

وحاولت عمل relasecomobject(o)

لكن للاسف نفس الخطأ

لا يتعرف على

com object

#10

هل من مجيب على الطلب

#11

لا يوجد مجيب

مواضيع مشابهة