Frage

Ich habe ein C ++ Projekt in VS6 erstellt, die in VS2010 und compiliert fein geöffnet wurden. Es enthält eine Klasse mit ein bisschen Inline-Assembler den folgenden Code wie:

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

alles schön und gut, bis ich versuche, ein neues MFC C ++ Projekt in VS2010 erstellen und die Klasse mit dem Assembler-Code hinzufügen oben gezeigt. Plötzlich, wird dies nicht als die neuere Interpretation von __asm ??kompilieren erfordert den Code wie folgt (oder etwas ähnliches, das kompiliert in jedem Fall):

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

Nun, für das Leben von mir, ich kann nicht herausfinden, was der Unterschied zwischen den beiden Projekten, die das umgewandelte VS6 Projekt ermöglichen die (vermutlichen derzeit ungültig) zu kompilieren Inline-Assembler-Code in VS2010, während ein neu erstelltes Projekt kann ‚t.

Gibt es irgendwo eine (versteckte) Einstellung, die man erlaubt die alten VS6 Compiler zu benutzen?

War es hilfreich?

Lösung

Die VS6 Inline-ASM scheint wie ein Bug, der behoben. Ich sage das, weil ich bin nicht sicher, wie der Compiler, dass m_pImage Mitglied verifizieren kann, war, was in dem eax Register geladen wurde und daher konnte nicht den Offset finden. Zur Beantwortung Ihrer Frage, gibt es keine Möglichkeit, ich bin mir dessen bewusst, zu verwenden, um die alten ASM-Semantik im VS6 Compiler.

Ich würde einen lokalen Variable außerhalb des Inline-ASM machen und dass zuweisen stattdessen esi.

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top