2017-09-04 2 views
0

私は、リソースファイルを使用するすべてのチュートリアル/ブックで欲求不満を感じていますが、なぜそれらを使用するのか、どのように使用するのかを決して説明しません。私はこれに関する何か情報を見つけることができませんでした。私は、誰かが後で見つけ出すための一般的な回答を誰かが作成できることを願っています。Windowsのリソースファイルはどのように動作し、なぜそれらを使用するのですか?

一部の関連情報は、リソースファイルの論理的根拠は何

  • ...

      を含むこともできますか?

    1. これらの機能は、Windowsコンパイラか言語コンパイラですか?

    2. なぜコードだけでGUIを作成してはいけないのですか?

    3. リソースファイルのみを使用できる、またはコードのみを使用できる状況がありますか?

    4. 実行時にリソースファイルのエントリを実際のウィンドウのオブジェクトに変換する方法を教えてください。

    5. リソースコンパイラは、エントリと正確に何を行い、コンパイルされたフォーマットには何が含まれていますか?

    6. コードではなくリソースファイルを使用して読み込み時間が異なるのですか?

    7. リソースやコードを使用する際の推奨事項を教えてください。

    さらに詳しい情報があります。

  • 答えて

    0

    従来、Windows開発では、リソースファイルは実行可能バイナリに直接埋め込まれていました。この特定のリソースへのアプローチはWindowsの外で多く使われているとは思えませんが、Javaは実行可能なビットと共に圧縮されたアーカイブにリソースを格納することで同じことをするクロスプラットフォームの方法を持っています。 APKファイルにリソースが埋め込まれているAndroid開発でも同じことが分かります。 XMLを使用してリソースを指定するのはかなり一般的です(Windowsのバイナリを除く)。

    リソースを実行可能ファイルにパッケージ化することは、「単一ファイル解決策」を提供する利点があります。実行可能ファイルにはアプリケーションロジックとサポートリソースがすべて1つのファイルにバンドルされています。これはいくつかの状況で役に立ちますが、単一のファイルとして配布可能な実質的なアプリケーションを見つけるのは非常にまれです。いずれにしても、リソースをパックするこの方法は、Windows開発の初期段階に戻ります。マイクロソフトはおそらく、その時代の他のデスクトップマイクロプラットフォームでは一般的だったアプローチを引き出していたのではないかと思われます。

    リソースでは、コードではなく宣言的に指定することができます。通常はユーザーインターフェイス要素です。便利な機能は、これらの宣言的な要素をロケール依存にすることです。たとえば、英語のメインメニュー、フランス語のメニューなどを指定し、実行時に適切なメニューを選択することができます。

    グラフィカルデザインツールでコードよりも宣言的なリソースファイルを作成して編集する方が簡単ですが、コードを直接出力することは不可能ではありません。いずれにしても、ユーザーインターフェイス要素をアプリケーションロジックから分離することは、通常「より良い」と考えられています。慎重に設計することで、アプリケーション自体が完成した後にユーザーインターフェイスのビットやその他のリソースを編集し、個別にメンテナンスすることができます。

    従来のWindowsリソースは、リソースコンパイラによって圧縮バイナリ形式にコンパイルされ、その形式でオブジェクト(.obj、.o)ファイルにポックされ、リンカによって実行可能ファイルにリンクされます。現代の開発ツールでは、すべてのものが完全に隠されており、最終的な実行可能ファイルが表示されていると考えられます。 Windows APIは、実行可能ファイルからリソースを解凍し、プログラムによる表現に変換する方法を認識しています。コードではなく、他のAPI呼び出しで使用できるメモリ内のデータです。

    私の経験では、XMLベースのリソースの処理は少し遅くなる可能性がありますが、Windows(バイナリ)リソースには明示的なコーディングよりも大きなオーバーヘッドがありません。

    ユーザーインターフェイスのコーディングは、通常、リソースを使用するよりも柔軟性があります。両方のアプローチが同じアプリケーションで使用されるのは珍しいことではありません。

    +0

    これは意味があります。 RCファイルに "101 icon.ico"のようなものを書くと、icon.icoデータがバイナリにコンパイルされ、LoadIcon(...、101)を呼び出すと、ウィンドウはそのデータを使って私にIconオブジェクトを作成して返しますか?私はオブジェクトがオンデマンドで読み込まれ、起動時に一度に読み込まれるとは限りません。それはかなり合理的かつ有用であるようです。 –

    +0

    私の想起は、実行可能ファイルの関連セクション(リソースを含むセクション)が実際にメモリにマップされることです。したがって、リソースの読み取りは、実行可能ファイルがロードされた後のファイル操作ではなく、メモリ操作です。私は、アイコンとメニューはコンパイルされたリソースファイルの内容にほぼ正確にマップされたメモリ内のデータ構造を持っていると考えているので、メモリにマップされたデータはほぼそのまま使用できます。ただし、これはWindowsのバージョンによって異なる場合があります。 –

    関連する問題