質問: バイナリファイルを静的ライブラリに埋め込み、実行ファイルにリンクして利用する方法を探しています。 Visual StudioのC++開発において、バイナリファイルをプログラムに埋め込んで参照するにはどのような方法がありますでしょうか。 に記載されている通り、「バイナリの追加、FindResourceW(...)、およびLoadResource(...)」を ・実行ファイル側で行った場合には問題なく動作するのですが、 ・静的ライブラリ側で行い、実行ファイルにリンクした場合、FindResourceW(...)がnullptrを返して失敗してしまいます。 解決策ご教授いただけないでしょうか。 よろしくお願い致します。
回答: まず、Windowsにおけるいわゆるリソースデータは、 Windows用実行ファイルである *.exe 又は *.dllに、リンク処理を通じて埋め込むことができます。 VSではスタティックライブラリプロジェクトにリソースを追加できますが、 プロジェクトの性質上ビルド時にリンカが起動されないため、 出来上がった*.resファイルはまったく利用されません(埋め込まれない)。 まず、本件の質問を 「唯一のリソースを複数の実行ファイルから参照する方法」 の様に解釈しなおすと、 その最も単純な方法は、唯一のDLLに対して当該リソースを埋め込み、 それを利用する側の実行ファイルはそのDLL経由で当該リソースを利用する、 ということになるかと思います。 DLL内のリソースはDLLのインスタンスハンドルを用いてアクセスしなければなりませんので、 DLLに当該リソースを提供する関数を用意するのが簡便で一般的な方法と言えます。