2

我有一个在 VS6 中创建的 C++ 项目,它在 VS2010 中打开并且编译良好。它包含一个带有一些内联汇编的类,包括以下代码:

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

一切都很好,花花公子,直到我尝试在 VS2010 中创建一个新的 MFC C++ 项目并使用上面显示的汇编代码添加类。突然,这将无法编译,因为 __asm 的新解释要求代码如下(或类似的东西;无论如何都会编译):

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

现在,对于我的生活,我无法弄清楚这两个项目之间的区别是什么,它允许转换后的 VS6 项目在 VS2010 中编译(假定当前无效)内联汇编代码,而新创建的项目不能。

是否有一个(隐藏的)设置允许使用旧的 VS6 编译器?

4

1 回答 1

2

VS6 内联 ASM 似乎是一个已修复的错误。我这么说是因为我不确定编译器如何验证它m_pImageeax寄存器中加载的内容的成员,因此找不到偏移量。要回答您的问题,我知道在 VS6 编译器中无法使用旧的 ASM 语义。

我会在内联 ASM 之外创建一个局部变量并将其分配给它esi

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
于 2011-01-07T15:28:56.357 回答