Question

J'ai un projet C++ créé en VS6 qui a été ouvert dans VS2010 et compile bien.Il contient une classe avec un peu de assembly en ligne, y compris le code suivant:

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

Toute fine et dandy, jusqu'à ce que j'essaie de créer un nouveau MFC C++ projet dans VS2010 et ajouter la classe avec l'assemblée de code présenté ci-dessus.Soudain, ce ne sera pas compiler la nouvelle interprétation de l' __asm nécessite le code comme suit (ou quelque chose de semblable;cette compile en tout cas):

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

Maintenant, pour la vie de moi, je n'arrive pas à comprendre quelle est la différence entre les deux projets, qui permet de convertir le VS6 projet pour compiler le (probable actuellement invalide) inline code assembleur dans VS2010, tandis qu'un projet nouvellement créé ne peut pas.

Est-il quelque part un (caché) de réglage qui permet d'utiliser l'ancien VS6 compilateur?

Était-ce utile?

La solution

Le VS6 inline ASM semble comme un bug qui a été corrigé.Je dis ça parce que je ne suis pas sûr de savoir comment le compilateur peut alors vérifier que m_pImage a été membre de ce qui a été chargé dans le eax registre et, par conséquent, ne pouvait pas trouver l'offset.Pour répondre à votre question, il n'y a pas moyen, j'en suis consciente, d'utiliser l'ancien ASM de la sémantique dans le VS6 compilateur.

Je voudrais faire une variable locale à l'extérieur de la ligne de l'ASM et de l'assigner à esi au lieu de cela.

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top