سؤال

لدي C++ إنشاء المشروع في VS6 الذي افتتح في VS2010 و يجمع ما يرام.أنه يحتوي على فئة مع بت مضمنة الجمعية بما في ذلك التعليمات البرمجية التالية:

__asm{
  mov eax,this
  mov esi,[eax].m_pImage
  ...

كل شيء على ما يرام ومدهش ، حتى محاولة خلق جديد MFC C++ المشروع في VS2010 وإضافة فئة مع الجمعية رمز هو مبين أعلاه.فجأة, هذا لن تجميع كما أحدث تفسير __asm يتطلب القانون أن تكون على النحو التالي (أو شيئا من هذا القبيل;هذا يجمع في أي حال):

__asm{
  mov eax,this
  mov esi,[eax]this.m_pImage
  ...

الآن, بالنسبة لي أنا لا يمكن معرفة ما هو الفرق بين اثنين من المشاريع التي يسمح تحويلها VS6 المشروع إلى تجميع (مفترض حاليا غير صالح) مضمنة رمز التجميع في VS2010 ، في حين تم إنشاؤه حديثا المشروع لا يمكن.

هناك في مكان ما (المخفية) الإعداد الذي يسمح استخدام القديم VS6 ومترجم ؟

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

المحلول

على VS6 مضمنة ASM يبدو الخلل التي تم إصلاحها.أقول ذلك لأنني غير متأكد من كيفية مترجم يمكن التحقق من ذلك m_pImage كان عضوا في ما تم تحميله في eax سجل وبالتالي لا يمكن العثور على تعويض.للإجابة على سؤالك ليس هناك طريقة أنا على علم ، استخدام القديم ASM دلالات في VS6 مترجم.

وأود أن جعل متغير محلي خارج مضمنة ASM و تعيين ذلك esi بدلا من ذلك.

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top