7

コンパイルされたリソースファイル(.res)があります。プログラムで変更できるように、C#で読み取る必要があります。これは.resxファイルまたは.rcファイルではないことに注意してください。ファイルはコンパイルされており、テキストベースではありません。

これまで、Win32 APIでLoadLibrary、LoadResourceなどを調べてみましたが、これらの関数は実行可能ファイル(.exe、.dll)でのみ機能し、リソースファイルでは機能しないようです。

BinaryReaderを使用してファイルをロードしようとしましたが、もちろん、結果のバイト配列をあまり理解できません。Marshal.PtrToStructureを使おうと思ったのですが、resファイルの構造がわかりません。RESOURCEHEADERの構造はわかっていますが、使い方がわかりませんでした(ネイティブコードの経験がほとんどないことは認めます)。

誰かが.resファイルのバージョン情報を正常に読み取って更新する方法を理解するのを手伝ってくれませんか?

4

1 に答える 1

3

とても良い質問です。既存の関数を使用しても、適切な答えが見つかりませんでした。幸いなことに、RES ファイル形式は比較的単純なようで、ここに文書化されています。

http://msdn.microsoft.com/en-us/library/ms648007(VS.85).aspx

バージョン リソースの RES ファイルをスキャンし、適切なフィールドを更新できるはずです。リソース ヘッダーは DWORD で整列されていることに注意してください。

私の他の唯一の提案は、LoadLibraryEx を使用して、RES ファイルを何らかの方法でデータファイルとしてロードできるかどうかを確認することです。しかし、あなたはすでにそれを試したようです。成功した場合は、このトピックが興味深いことに気付くかもしれません。これは、2 つのモジュール間でリソースをコピーする方法の例です。

http://msdn.microsoft.com/en-us/library/ms648008(VS.85).aspx

私はそれがうまくいくとは思わない。RC.EXE を Dependency Walker にロードして、RES ファイルの作成に興味深い API が使用されているかどうかを確認しました。何も見つからなかったので、RC.EXE が RES ファイルを直接書き出すとしか思えません。

于 2011-11-02T15:02:13.503 に答える