سؤال

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

أعتقد أن القضية تتعلق بالرؤوس المعادلة. إليك لماذا:

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

يبدو لي أن الطبقات المدارة من DLL's يمكنك استيرادها محددة في الرأس Precompiled. لم أتمكن من التحقق من ذلك، لكن هذا هو أفضل تخمين لدي. هل لدى أي شخص أي فكرة يمكن أن تسليط بهذه المشكلة؟ هي مراجع المشروع في DLL مختلطة حلها عن طريق وضع السنانير في PCH المدارة؟

خطوات إعادة التكاثر

ما يلي لا معنى لي:

  1. الحصول على عميل للبناء.
  2. إزالة المرجع من العميل إلى Core. ترجمة العميل. العميل لا يزال يبني. هذا غير متوقع.
  3. إعادة ترجمة PCH العميل، ثم ترجمة العميل. فشل Compile Client: الفئات في "الأساسية" غير محددة. هذا هو السلوك المتوقع.
  4. إضافة إشارة إلى الأساسية، ترجمة. فشل Compile Client في نفس السبب. هذا غير متوقع
  5. إعادة ترجمة PCH العميل، ثم ترجمة العميل. العميل يجمع بشكل جيد.

استنتاجي من هذه التجربة هو أن المراجع يتم إدراجها في المشروع عبر الرؤوس العمودية، وأن شيئا ما يتم كسره بالطريقة التي يعمل بها هذا، على الأقل في آلة البناء لدينا.

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

المحلول

هناك طريقة أخرى لإضافة مراجع إلى وضع DLL المدارة / مختلطة في C ++ / CLI - إنه لإضافة #USing Core.dll إلى العميل. هذا قد يحل مشكلة بناء الخاص بك.

نصائح أخرى

لا يمكن أن تعمل مثل هذا، لأنك لا تحتاج إلى استخدام رأس مسبم.
كل ما يتيح لك كل PCH تسريع البناء.
لا يفعل أي شيء خاص مع المراجع .....

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