Visual Studio 2010 Visual Studio 6のようにC ++でインラインアセンブリをコンパイルする?

StackOverflow https://stackoverflow.com/questions/4626981

質問

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
   ...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top