سؤال

استخدام c# وVS2005 و.NET 2.0.(XP 32 بت) هذا هو تطبيق Winforms الذي يتم استدعاؤه بواسطة VBA addin (.xla) عبر مكتبات Interop.كان هذا التطبيق موجودًا منذ فترة ويعمل بشكل جيد عندما يتم تجميع التجميع وتنفيذه في أي مكان آخر غير جهاز التطوير الخاص بي.في مرحلة التطوير، يتعطل بشدة (في مصحح الأخطاء وتشغيل الكائن فقط) مع "الاستثناء غير المعالج عند 0x...في EXCEL.EXE:0x...موقع قراءة المخالفة 0x...

ولكن هنا الجزء الغريب:

الطريقة الأولى في واجهتي تعمل بشكل جيد.جميع الطرق الأخرى تتعطل على النحو الوارد أعلاه.فيما يلي تقريب للكود:

[Guid("123Fooetc...")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IBar
    {
        [DispId(1)]
         void ThisOneWorksFine(Excel.Workbook ActiveWorkBook);

         [DispId(2)]
         string Crash1(Excel.Workbook ActiveWorkBook);

         [DispId(3)]
         int Crash2(Excel.Workbook activeWorkBook, Excel.Range target, string someStr);
     }

    [Guid("345Fooetc..")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("MyNameSpace.MyClass")]    
    public class MyClass : IBar
    {
        public void ThisOneWorksFine(Excel.Workbook ActiveWorkBook)
        {...}

         string Crash1(Excel.Workbook ActiveWorkBook);
        {...}

         int Crash2(Excel.Workbook activeWorkBook, Excel.Range target, string someStr);
        {...}

    }

يبدو وكأنه نوع من الأشياء البيئية.التسجيل chundered؟قد تكون هناك أخطاء برمجية، ولكنها تعمل بشكل جيد في أي مكان آخر.

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

المحلول

لقد واجهت مشاكل في هذا السيناريو مع Office 2003 في الماضي.بعض الأشياء التي ساعدت:

  • أدى تثبيت Office 2003 Service Pack 2 إلى إيقاف بعض الأعطال التي حدثت عند إغلاق Excel.

  • يؤدي تثبيت Office 2003 Service Pack 3 إلى إصلاح الخلل في استخدام أنماط XP في تطبيق VSTO2005 (وليس حالتك هنا)

  • تشغيل برنامج Excel VBA CodeCleaner http://www.appspro.com/Utilities/CodeCleaner.htm يساعد بشكل دوري على منع الأعطال العشوائية.

  • قد يكون الوصول إلى كائنات Excel من سلاسل رسائل متعددة أمرًا مراوغًا، لذا أتمنى ألا تفعل ذلك.

إذا كانت لديك الإمكانية، فيمكنك أيضًا محاولة فتح حالة باستخدام Microsoft PSS.إنها جيدة جدًا إذا كنت قادرًا على إعادة إنتاج المشكلة.وفي معظم الحالات، يعد هذا النوع من الأشياء بمثابة خطأ، لذا لن يتم تحصيل رسوم منك مقابل ذلك :)

نصائح أخرى

هل جهازك المطور Win64؟لقد واجهت مشكلات مع إصدارات Win64 للتطبيقات التي تختفي إذا قمت بتعيين النظام الأساسي للإنشاء على x86.

هل جهاز التطوير لديك يعمل بإصدار مختلف من Office عن الأجهزة الأخرى؟أعلم أن PIAs تختلف.لذا، إذا كنت تقوم بالتطوير على Office 2003 والاختبار على Office 2007 (أو العكس)، على سبيل المثال، فسوف تواجه مشكلات.

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