سؤال

لدينا تطبيق WinForms مكتوب بلغة C# يستخدم مكون AxAcroPDFLib.AxAcroPDF لتحميل ملف PDF وطباعته.لقد كان يعمل دون أي مشاكل في نظام التشغيل Windows XP.لقد قمت بنقل بيئة التطوير الخاصة بي إلى نظام التشغيل Vista 64 بت والآن لن يتم تشغيل التطبيق (على نظام التشغيل Vista 64) إلا إذا قمت بإزالة مكون AxAcroPDF.أحصل على الخطأ التالي عند تشغيل التطبيق:

"System.Runtime.InteropServices.COMException:الفئة غير مسجلة (استثناء من HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)".

لقد تم إعلامي في منتديات Adobe بأن سبب الخطأ هو عدم توفر إصدار 64 بت من عنصر تحكم AxAcroPDF ActiveX.

هل هناك طريقة للتغلب على هذه المشكلة؟على سبيل المثال، هل يمكنني تحويل عنصر تحكم ActiveX 32 بت إلى عنصر تحكم 64 بت بنفسي؟

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

المحلول

لا يمكنك تحويل عنصر تحكم Adobe ActiveX إلى 64 بت بنفسك، ولكن يمكنك إجبار تطبيقك على التشغيل في وضع 32 بت عن طريق تعيين هدف النظام الأساسي على x86.

للحصول على إرشادات حول إصدار Visual Studio الخاص بك، راجع القسم 1.44 من مشكلات عند استخدام Microsoft Visual Studio 2005

نصائح أخرى

يستهدف برنامج .Net Framework 1.1 دائمًا وحدات المعالجة المركزية (CPUs) ذات 32 بت، بينما يمكن لـ .Net Framework 2.0 وما فوقه استهداف 32 بت أو 64 بت وفقًا لخاصية ProcessorArchitecture الخاصة ببيان البرنامج الذي تم تغييره بواسطة خيار "Platform Target" الخاص بـ Visual Studio IDE.باستخدام الخيار الافتراضي "Any CPU"، يتم تجميع كود IL وفقًا للنظام الأساسي ولكن بالطبع يفشل استدعاء COM لمكون AxAcroPDF 32 بت إذا كان النظام الأساسي 64 بت.ما عليك سوى إعادة إنشاء ملف EXE لاستهداف النظام الأساسي 32 بت فقط.يعمل هذا بشكل جيد مع محاكي WOW64 في نظام التشغيل Vista 64 بت.

استخدم عزل DLL، ويعمل مع كل تطبيق 32 بت COM+.انظر أكثر في:http://support.microsoft.com/kb/281335

باستخدام هذا الحل، يمكنك عزل تطبيق COM+ 32 بت الخاص بك في عملية 32 بت منفصلة.

تبحث تطبيقات 64 بت عن كائنات COM+ المثبتة على:HKLM\Software\Classes، لكن تطبيقات 32 بت تستخدم HKLM\Software\WOW6432\Classes

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