سؤال

ولقد حولت تطبيق وضع MFC مختلطة من VS2005 إلى VS2008. ومن تجميع موافق ولكن عند بدء تطبيق أحصل على تأكيد في afxwin1.inl لafxCurrentResourceHandle = NULL.

وهذا قبل ما يسمى MyCWinApp :: InitInstance. مكدس الاستدعاءات هو

mfc90d.dll->AfxWinInit (with HINSTANCE = NULL)
myapp.exe!InternalDllMain
myapp.exe!PostDllMain
myapp.exe!dynamic intilizer for postDllMain::A0x61ae6c8e

ونفس المشروع في VS2005 حتى تبدأ الغرامة وألاحظ أنه بدلا من PostDllMain بيينغ يسمى يطلق عليه اسم WinMainCRTStarup ويحصل على مؤشر مثيل تعريف:

mfc80d.dll!AfxWinInit (with HINSTANCE = 0x0040000)
mfc80d.dll!AfxWinMain
myApp.exe!WinMain
myApp.exe!__tmainCRTStartup
myapp.exe!WinMainCRTStartup

ويتم ترجمة التطبيق مع / مسح وروابط لكليهما، ليبس ودلس غير المدارة والمختلط المدارة.

ويمكن لأي شخص أن يلقي بعض الضوء على هذه القضية؟ هل هناك أي اختلافات المعروفة في هذا المجال بين VS2005 وVS2008؟

وشكرا!

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

المحلول

وحصلت على إجابة لطيفة من رونغ تشون تشانغ في المنتدى MSDN:

ومرحبا،

وأديت اختبار على جانبي، وأنا لم إعادة إنشاء المشكلة على جانبي. ومع ذلك، مكدس الاستدعاءات في Vsiaul ستوديو 2008 يبدو أنه هو DLL، لذلك حاولت إضافة _USRDLL في تعاريف Proprocessor (/ D "_USRDLL") من إعدادات المشروع، وأنا حصلت على نفس التأكيد كما وصفته أنت. يرجى معرفة ما اذا كان يتم ترجمة المشروع مع "_USRDLL".

لمزيد من المعلومات http://support.microsoft.com/kb/115088

واسمحوا لي أن أعرف إذا كان ذلك يساعد، إذا لم يكن كذلك، فأرجو أن تبين لنا سطر الأوامر من إعدادات المشروع؟

وشكرا، رونغ تشون تشانغ


وكان هذا الحق على العلامة!

وتبين أن واحدا من المشاريع في بلدي الحل الذي تم إعداده باعتباره ليب ثابت قد حددت _USRDLL في تعريفات المعالج لها. بطريقة أو بأخرى هذا يتم تجاهلها في VS2005 لكن VS2008 بوضوح لا ترغب في ذلك.

وشكرا السيد. تشانغ!

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