سؤال

لدي فصل مقيم داخل ملف dll و exe باستخدام هذا dll. يقوم Exe ببساطة بإنشاء الفئة داخل dll واستدعاء أساليبها. كل شيء يعمل بشكل جيد عند تجميعه في وضع الإصدار. ولكن إذا قمت بتجميع كل شيء (بما في ذلك مكتبة OpenCV التي يستخدمها صفي) في وضع التصحيح باستخدام علامة MDd ، فسأحصل على: Genacodicetagpre

تستخدم جميع الثنائيات المتضمنة الإصدار نفسه تمامًا من ملفات dll لوقت التشغيل ويتم تجميع كل شيء على نفس الكمبيوتر باستخدام VS 2008. وبقدر ما أفهم (بناءً على تصحيحاتي) فإن المشكلة هي التالية:

أقوم بإنشاء مثيل لفصلي باستخدام عامل التشغيل "الجديد" في exe (تحت main) ، وبمجرد أن يقوم مُنشئ صفي بعمل شيء يتطلب تخصيصًا للذاكرة ، تتم الكتابة فوق موقع ذاكرة الفصل نفسه كما لو كلا من dll و exe يستخدمان نفس مساحة الذاكرة لكنهما يختلفان "الموضع التالي المتاح لتخصيص" الإزاحات. لذلك لا يرى dll أنه كان هناك بالفعل تخصيص تم إجراؤه داخل exe ومن ثم الكتابة فوق منطقة الذاكرة الموجودة في صفي. من الواضح أن هذا يسبب مشكلة في الذاكرة.

هل لديك فكرة عن سبب حدوث ذلك؟ لقد بذلت قصارى جهدي لشرح الموقف ولكن يمكنني بالطبع تقديم مزيد من المعلومات إذا لزم الأمر.

شكرًا مقدمًا

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

المحلول 2

اكتشفت أن المشكلة تكمن في متغيرين من المتغيرات العامة التي كانت مفقودة من ملف رأس الفصل عن طريق خطئي.عندما أضفتهم ، تم حل المشكلة.

نصائح أخرى

يرجى التحقق من وحدات DEBUG MACROs هذه ، إنها ضروريةشيء من هذا القبيل ASSERT ...

يتم تجميعها في وضع التصحيح.

عند تجميع التعليمات البرمجية في وضع التحرير ، يتم تعطيل تصحيح أخطاء MACRO.

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