Visual Studio 2010 компилирует встроенную сборку на С++, как если бы Visual Studio 6?
-
30-09-2019 - |
Вопрос
У меня есть проект 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?
Решение
Встроенный ASM VS6 кажется исправленной ошибкой.Я говорю это потому, что не уверен, как компилятор мог это проверить. m_pImage
был участником того, что было загружено в eax
зарегистрировался и поэтому не смог найти смещение.Отвечая на ваш вопрос, я знаю, что нет возможности использовать старую семантику ASM в компиляторе VS6.
Я бы создал локальную переменную вне встроенного ASM и присвоил бы ее esi
вместо.
void * pointer = this.m_pImage;
__asm
{
mov ebx, pointer
mov esi, ebx
...