سؤال

والسيناريو: لدي مشروع containgin اثنين # مشاريع C، والتي لأسباب تاريخية يجب التواصل مع بعضهم COM باستخدام الآخر (عبر COM إمكانية التشغيل المتداخل). خادم COM هو كائن الأتمتة في عملية (نسمي هذا "خادم") والعميل COM هو تطبيق بسيط C # وحدة التحكم الذي يقوم بتحميل خادم مثل هذا:

        var objTypee = Type.GetTypeFromProgID("ProgID.Interop3264");
        var objLateBound = Activator.CreateInstance(objType);

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

والمشكلة تأتي عندما وضع على نظام 64 بت ويتم تعيين كلا المشروعين لتوليد رمز ل"أي وحدة المعالجة المركزية" والذي ينتج في تشغيلها في وضع 64 بت. ينتج هذا الخطأ التالي:

"Retrieving the COM class factory for component with CLSID {6F597EDF-9CC8-4D81-B42E-1EA9B983AB02} failed due to the following error: 80040154."

وبعد بعض التحقيقات، يبدو أن مخطوطات MSBuild فقط تنفيذ تسجيل 32 بت. لا وضعها على معرف البرنامج إلى قسم التسجيل 64-بت، جنبا إلى جنب مع الفرعي في CLSID، وCLASSID السليم. ولكن CLSID {CLSID} الاشياء ليست هناك. انها فقط في الشجرة الفرعية WOW6432، لمدة 32 بت. حتى المنشط لا يمكن استرداد مصنع فئة لأنه لا يمكن العثور على شيء.

وسأكون أعجب حقا مع المجتمع SO لو أحصل على إجابة على هذا واحد، ولكن هنا المثل:

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

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

المحلول

لقد واجهت هذه المشكلة وحلها من خلال وضع مشاريع لتوليد المجالس ل x86. هذا هو الأمثل، وبطبيعة الحال، ولكن لدينا أيضا العديد من يبس 32 بت الأم، لذلك كان علينا أن نفعل ذلك على أي حال.

نصائح أخرى

وكنت قادرا على حل هذه مع KB البند التالي. أساسا أنا إيقاف التسجيل لإمكانية التشغيل المتداخل COM في مشروع بناء الإعدادات، واستخدام الأمر بعد بناء:

"%Windir%\Microsoft.NET\Framework64\v2.0.50727\regasm" "$(TargetPath)" 

http://support.microsoft.com/kb/956933

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