3

私は、さまざまなWindows Cエントリのpooints、wmainおよびWinMainに関するいくつかの記事を読みました。

したがって、私が正しければ、これらはWindowsOS用のC言語コンパイラーに追加されます。しかし、どのように実装されていますか?

たとえば、wmainはUnicodeをargv []として取得しますが、そのOsはこれらの引数をプログラムに送信します。したがって、Windowsに引数をユニコードとして渡すように指示する特別なフィールドが.exeファイルエントリにありますか?ありがとう。

4

2 に答える 2

4

最新バージョンのWindowsは、内部でUTF-16を使用しています。したがって、実行可能ファイルを起動すると、すべてのコマンドライン引数が最初からUTF-16として渡される可能性が高く、起動されたアプリケーションにリンクされたランタイムライブラリは、引数を無傷で渡すか(使用している場合wmain)、ローカルエンコーディングに自動的に変換します。 (を使用している場合main)。(具体的には、これはwmainCRTStartup/によって実行されmainCRTStartupます。これは、コンソールWindowsアプリケーションに使用される実際のエントリポイントです。)

于 2010-08-24T10:51:47.770 に答える
2

第一に:衒学的な暴言:wmainは確かにUnicode引数を取得しません。 Unicodeは、特定のエンコーディングとは無関係に定義されます。wmainは、推測でUnicode、UTF-16の16ビット文字エンコードで引数を取得します。wmainに関するMicrosoftのドキュメントとそこからのリンクを確認したところ、MicrosoftがUnicodeを作成したときにそれが何であるかについての手がかりがなかったことは明らかです。

とにかく、プログラムのエントリポイントはリンカによって定義されます。ACプログラムには、main / wmain / WinMain/wWinMainの前に実行される一定量のプロローグコードが常にあります。mainのワイドバージョンの1つが使用されている場合、プロローグコードは、環境内の文字を、それらが含まれている文字セットからワイド文字バージョンに変換します。

于 2010-08-24T10:43:10.143 に答える