質問

私は、さまざまなWindows Cエントリポイント、Wmain、Winmainに関するいくつかの記事を読みました。

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

たとえば、WmainはUnicodeをArgv []として取得しますが、これらの引数をプログラムに送信するOSは、.exeファイルエントリにWindowsにArguemntsをUnicodeとして渡すという特別なフィールドがありますか?ありがとう。

役に立ちましたか?

解決

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

他のヒント

最初:Pedantic Rant:Wmainは確かにUnicode引数を取得しません。 Unicodeは独立して定義されます 特定のエンコーディングの。 Wmainは、Unicode、UTF-16の16ビット文字エンコードで議論を受け取ります。 Microsoftのドキュメントを確認しました wmain そして、それからのリンクと、MicrosoftがUnicodeがそれを書いたときに何であるかについての手がかりがなかったことは明らかです。

とにかく、プログラムのエントリポイントはリンカーによって定義されます。 ACプログラムには、Main/Wmain/Winmain/Wwinmainの前に実行される一定量のプロローグコードが常にあります。 Mainの幅広いバージョンの1つを使用すると、Prologueコードは、環境内の文字を、それらが存在するキャラクターセットからワイドキャラクターバージョンに変換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top