わかりました、私は答えを見つけました。実際には 2 つのソリューションが存在します。しかし、まず、エラーの理由は、VS 2005 以降に変更が加えられ、アセンブリの組み立て方法が変更され、VS の基盤を扱う技術情報につながることです。ここでは「方法」がはるかに重要です。まずサンプルコードを載せますが、基本的にはどの方法を使っても同じコードです。
コード:
;sh3.asm - test using c run-time library functions
.586
.model flat
EXTRN _printf:PROC
.data
msgHello DB 'C ライブラリからこんにちは!', 0ah, 00h
.code
_main PROC
push OFFSET msgHello
call _printf
add esp, 4
ret 0
_main ENDP
END
さて、方法1:
空のプロジェクトから始めます。拡張子が .asm のソース ファイルを追加し、コードを入力します。コードのエントリ ポイントには _main という名前を付けてください。別の名前の使用に対処する方法 2。
次に、ソリューション エクスプローラーでプロジェクト名を右クリックし、カスタム ビルド規則を選択して、MASM を使用するためのプロジェクトを設定します。[Microsoft マクロ アセンブラー] ボックスをオンにします。
次に、プロジェクト -> プロパティ -> リンカー -> 追加の依存関係に移動し、C ランタイム ライブラリ名を入力します。たとえば、リリース コードの場合は msvcrt.lib、デバッグ フェーズの場合は msvcrtd.lib です。重要な注意: エントリ ポイントまたはサブシステムのエントリを作成しないでください。
コードを組み立てて実行します。
方法 2:
空のプロジェクトから始めます。拡張子が .asm のソース ファイルを追加し、コードを入力します。選択したラベルを使用して、コードのエントリ ポイントに名前を付けます。たとえば、開始します。
次に、ソリューション エクスプローラーでプロジェクト名を右クリックし、カスタム ビルド規則を選択して、MASM を使用するためのプロジェクトを設定します。[Microsoft マクロ アセンブラー] ボックスをオンにします。
次に、プロジェクト -> プロパティ -> リンカー -> 追加の依存関係に移動し、C ランタイム ライブラリ名を入力します。たとえば、リリース コードの場合は msvcrt.lib、デバッグ フェーズの場合は msvcrtd.lib です。
次に、リンカ ページでシステムを選択し、コンソールに変更してから、高度なページに移動し、エントリ ポイント ボックスにエントリ ラベルを入力します (たとえば、start など)。
次に、リンカー ページでマニフェスト ファイルを選択し、追加のマニフェストの依存関係を選択して、次のように入力します。 1fc8b3b9a1e18e3b' はすべて 1 行です。
コードをアセンブルして実行します。
この情報は VS と Windows のバージョンに依存している可能性が高いため、追加の依存関係に関する情報がどこにあるのか疑問に思われるかもしれません。方法 1 を使用して簡単なプロジェクトを作成し、そのマニフェスト ファイルを見つけてテキスト エディターで読み取ります。情報を含む依存関係の行が表示されます。
個人的には、方法 1 が最も簡単な方法だと思います。エントリ ポイントに _main という名前を付けざるを得なくなったことは、C ランタイム ライブラリ コードを柔軟に使用できることに対して支払う代償としては非常に小さいものです。また、サブシステムを設定する必要がないという利点もあります。ここで、特記事項として、C ランタイム ライブラリを使用していない場合は、方法 2 を使用し、マニフェストの依存関係を追加する手順を省略します。それは必要ありません!
ちなみに、Win32 API と C ランタイム ライブラリへの呼び出しを使用して方法 1 もテストしましたが、コードは正常に動作しました。つまり、Windows API 呼び出しと C ランタイム ライブラリ呼び出しの両方を同じコードで使用できます。
この情報が、Visual Studio を使用して Windows でアセンブリ コードを記述するのに役立つことを願っています。頑張って楽しんでね!
〜江石