Visual Studio 2010 compilación de línea de montaje en C ++ como si Visual Studio 6?
-
30-09-2019 - |
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?
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
...