我有一个在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编译器?

有帮助吗?

解决方案

VS6内联ASM似乎是固定的错误。我之所以这样说,是因为我不确定编译器如何验证 m_pImage 是在 eax 注册,因此找不到偏移。为了回答您的问题,我知道,使用VS6编译器中的旧ASM语义是没有办法的。

我会在内联ASM之外进行本地变量,并将其分配给 esi 反而。

void * pointer = this.m_pImage;
__asm
{
   mov ebx, pointer
   mov esi, ebx
   ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top