必须发布代码取决于函数调用保留的ebx吗?

时间:2011-11-08 20:35:34

标签: visual-studio-2010 visual-c++ inline-assembly

我正在为一个内部包含用汇编语言编写的大部件的应用程序编写DLL附加组件。我正在混合托管C ++,非托管C ++和内联汇编。

我花了几个小时调试一个问题,结果是在调用主应用程序期间没有保留ebx。只有当代码在发布模式下运行并且在调试器外部时才会发生错误。调试器中的发布代码没有此问题。

我已经关闭了我可以为Release Build找到的所有优化,但它仍然取决于ebx。我添加了push/pop ebx作为解决方法,但是这个错误肯定会再次出现。 : - (

是否可以告诉编译器在函数调用期间可能会更改ebx

1 个答案:

答案 0 :(得分:4)

错误在函数的原型中,该函数报告它符合调用约定而实际上不符合调用约定的寄存器保留规则。你需要在你自己的函数中包含对buggy函数的调用,使其符合(通过保留寄存器),并让每个人都调用包装器。 #pragma deprecated将允许您执行此政策。