Visual Studio 2010 Visual Studio 6のようにC ++でインラインアセンブリをコンパイルする?
-
30-09-2019 - |
質問
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で(現在推定可能な)インラインアセンブリコードをコンパイルすることを可能にする2つのプロジェクトの違いが何であるかを理解することはできませんが、新しく作成されたプロジェクトはできません。
古いVS6コンパイラを使用できる(非表示)設定はありますか?
解決
VS6インラインASMは、修正されたバグのようです。コンパイラがそれをどのように確認できるかわからないので、私はそれを言います m_pImage
ロードされたもののメンバーでした eax
登録するため、オフセットを見つけることができませんでした。あなたの質問に答えるために、VS6コンパイラで古いASMセマンティクスを使用する方法はありません。
インラインASMの外側にローカル変数を作成し、それをに割り当てます esi
代わりは。
void * pointer = this.m_pImage;
__asm
{
mov ebx, pointer
mov esi, ebx
...
所属していません StackOverflow