Pregunta

Tengo un proyecto C ++ creada en VS6 que se abrió en VS2010 y compila bien. Contiene una clase con un poco de línea, incluyendo el montaje el código siguiente:

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

Todo lo fino y elegante, hasta que tratar de crear un nuevo proyecto MFC C ++ en VS2010 y añadir a la clase con el código de montaje se muestra arriba. De repente, este no se compilará como el más reciente interpretación de __asm ??requiere el código para la siguiente (o algo similar, lo compila en cualquier caso):

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

Ahora, para la vida de mí, no puedo averiguar cuál es la diferencia entre los dos proyectos, que permite que el proyecto VS6 convertido a compilar la (presumible Actualmente no válida) en línea de montaje código en VS2010, mientras que una lata proyecto recién creado 't.

¿Hay algún lugar un ajuste (oculto), que le permite a uno usar el viejo compilador VS6?

¿Fue útil?

Solución

El VS6 línea ASM parece un error que fue corregido. Lo digo porque no estoy seguro de cómo el compilador podría verificar que m_pImage era miembro de lo que estaba cargado en el registro eax y por lo tanto no pudo encontrar el desplazamiento. Para responder a su pregunta, no hay manera, soy consciente de, utilizando la antigua semántica ASM en el compilador VS6.

Me haría una variable local fuera de la ASM en línea y asignar a esi que en su lugar.

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top