لا يمكن أن تكون الذاكرة خطأ "قراءة" عند فتح نموذج VB6 من تطبيق .NET

StackOverflow https://stackoverflow.com/questions/399295

سؤال

لدي تطبيق مكتوب في C # .NET (Framework 2.0 إذا كان يهم). يستدعي EXE VB6 الذي يعرض فئة COM مع طريقة واحدة - يظهر نموذجا.

عند إغلاق نموذج VB، أحصل على خطأ في النظام (رسالة Windows): لا يمكن قراءة موقع الذاكرة. ثم، يسألني النوافذ سواء لإغلاق التطبيق أو تصحيحها. لا يهم حقا ما اخترته لأنه ليس هناك موظفين مثبتين على آلة الاختبار وعندما حدد "تصحيح" يعطيني رسالة سيتعين إغلاقها.

يحدث الخطأ فقط بموجب شرطين (يجب تطبيق كلاهما):

  • عند تشغيل هذا تحت نظام التشغيل Windows 2000.
  • أيضا، يحدث هذا فقط إذا قمت بالنقر فوق الزر "عرض تقرير" أولا، والذي يستدعي تقارير COM DLL أخرى - لتوليد تقرير.

أساسا، التدفق هو مثل هذا:

 تطبيق C # .NET | - نموذج MDI | عند النقر على زر في النموذج، يتم استدعاء طريقة VB6 + - إظهار النموذج. تسمى SETPARENT (VBForm.handle، dotnetform.handle) | ويظهر النموذج. إرجاع الأسلوب المسمى (لا توجد قيمة للعودة) | | | + - عند النقر فوق "عرض تقرير"، يتم استخدام تقارير الكريستال لتوليد تقرير وإظهارها للمستخدم | | |  - عند النقر فوق زر الخروج، يتم إغلاق النموذج - هذا هو المكان الذي يحدث فيه الخطأ|  - شكل .NET يبقي على العيش لفترة طويلة بعد ذلك النموذج الداخلي مغلقة

هل يعرف أحد ما يمكن أن يسبب مثل هذا الخطأ؟ VB لديه On Error Goto الخط المحيط بالطريقة الرئيسية بأكملها، والتي يجب أن تلتقط أي خطأ في VB - لكنها لا. ومع ذلك، يأتي الخطأ من ملف EXE الذي تم إنشاؤه VB.

هل كانت مفيدة؟

المحلول

يمكنك تأكيد الوحدة النمطية داخل EXE VB تعطل عن طريق إرفاق مصحح غريب غير مدار ورؤية ما تتبع المكدس.

تقارير الكريستال تبدو وكأنها مجيدة محتملة، ولكن من الممكن أن يسبب شيئا آخر المشكلة. على افتراض أن لديك إمكانية الوصول إلى رمز VB، أود أن أتحقق من أن جميع كائنات COM COM COM COM يتم إصدارها بشكل صحيح. إذا كان هناك شيء يترك حوله، فقد يتفاعل بشكل سيء مع إيقاف تشغيل التطبيق.

إذا كنت تريد حلا هاكني حقا، فيمكنك التفكير في استدعاء وظيفة Win32 TermateProcess داخل حدث OnClose. سيؤدي ذلك إلى إنهاء العملية دون إبلاغ أي dlls المرفقة ... ليست جميلة وقد تؤدي إلى تذكار الاتصالات إلى قواعد البيانات، وما إلى ذلك والتي ستحتاج إلى تنظيف أنفسهم (المحتمل على مهلة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top