Visual Studio 2010 像 Visual Studio 6 一样在 C++ 中编译内联程序集?
Posted
技术标签:
【中文标题】Visual Studio 2010 像 Visual Studio 6 一样在 C++ 中编译内联程序集?【英文标题】:Visual Studio 2010 compiling inline assembly in c++ as if Visual Studio 6? 【发布时间】:2011-01-07 15:17:34 【问题描述】:我有一个在 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 编译器?
【问题讨论】:
【参考方案1】:VS6 内联 ASM 似乎是一个已修复的错误。我这么说是因为我不确定编译器如何验证m_pImage
是eax
寄存器中加载的内容的成员,因此无法找到偏移量。要回答您的问题,我知道在 VS6 编译器中无法使用旧的 ASM 语义。
我会在内联 ASM 之外创建一个局部变量,然后将其分配给 esi
。
void * pointer = this.m_pImage;
__asm
mov ebx, pointer
mov esi, ebx
...
【讨论】:
当你从 VS6 转换一个项目时(并且只有 VS6——其他版本不会发生这种情况),大量的兼容性设置被应用。可能已添加此错误修复,但旧的代码路径仍在 VS6 兼容模式下使用。 没有办法复制这些兼容性设置? 忽略最后一条评论......再次阅读答案和比利的评论,我很清楚我们不应该希望我们的错误遗留 VS6 代码在这个时代仍然有效。跨度>以上是关于Visual Studio 2010 像 Visual Studio 6 一样在 C++ 中编译内联程序集?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010 像 Visual Studio 6 一样在 C++ 中编译内联程序集?
Visual Studio进行Web性能测试- Part I
有啥建议如何为像 Visual Studio 2010 测试这样的 NUnit 测试部署依赖项吗?