Libファイルで構成されるプロジェクトに
String Tableを作成しました。
その後、ダイアログベースでLibファイルプロジェクトの
クラスをインスタンス化し、
CString::LoadStringでString Table内の
文字列を取得したところNULLが返ってきます。
上記の条件の場合、リソースから取得できない要因など
あるのでしょうか?
lib っつーことは「スタティックライブラリ」のプロジェクトを作って、
スタティックライブラリのソースコードにリソースを含めたら、
そのスタティックライブラリを利用するアプリケーション側でリソースが取れない
という認識であっているのかな(要確認)
もしそうなら、これはできないのが仕様
スタティックライブラリは、その中に含まれる関数等のうち、
アプリケーションプログラムのリンク時に使用されているもののみピックアップして
取り込まれるというのが仕様。なので
スタティックライブラリ中のリソースはアプリケーションには含まれない。
えーそうなんですか。
では、もしString Tableを用いるなら、
メインプロジェクト(今回ならダイアログクラス)
のリソースから参照する形がベターなのでしょうか?
ライブラリ側で複数言語対応された
スタティックな文字列テーブルを持ちたかったのですが、
出来ないとなるとソース又はファイルで持つほかないって事ですか・・・
この辺、アプローチとして2種類考えることができ、
・同一EXE内部に複数の言語リソースを含ませる
・EXE内部には言語リソースを一切含まないようにし、リソースは DLL に分離する
前者 (EXE 1つ) であれば
・日本語OS上であれば日本語画面が表示される
・日本語OS以外であれば英語画面が表示される (独仏中OSでも英語表示)
という形の2言語の形にとどめておくのが安全 (Neutral 言語 + Localized 言語1つ)
アプリケーションプロジェクト上で「リソースの挿入」で別言語リソースを挿入でok
(下記提示ページの補遺の手順)
真に多言語したいのであれば、後者手順 (DLL 分離) が必要となり、参考
http://hp.vector.co.jp/authors/VA000092/win32/multi-lang-mfc.html
> ライブラリ側で複数言語対応された
要するにスタティックではなくダイナミック、つまり lib ではなく dll なら可能。
ただ、単複変化や語順違い、表示すべき文字列の長さの違い、などなどから
そうあっさりと簡単にはいかない場合が多いですだよ(経験済み)
> ライブラリ側で複数言語対応された
> スタティックな文字列テーブルを持ちたかったのですが、
こう言う事がしたい時はダイナミックリンクライブラリにすると思いますけれど、
まろさんが言っているLibファイルは、スタティックリンクライブラリと
ダイナミックリンクライブラリのどっちなんでしょう。
通常、スタティックリンクライブラリの場合は完全に実行ファイルに
組み込まれる形になるのでこれにリソースを入れることはしないと思います。
この場合はリソースは実行ファイルのプロジェクトに入れるのが普通では?
うわっ、tetrapodさんとかぶってた。(^^;
お返事ありがとうございます。
プロジェクト構成上、
実行ファイルに組み込まれる形を望んでます。
そのためスタティックリンクライブラリで
作成しています。
しかし、ライブラリ(スタティック・ダイナミック共に)内の
情報としてString Tableを持たせれないかと考えてたのです。
(つまり、共通の機能内で用いる文字列)
また、リソースをDLL に分離させるプロジェクト方法は、
スタンダードな作成方法なのでしょうか?
> また、リソースをDLL に分離させるプロジェクト方法は、
> スタンダードな作成方法なのでしょうか?
一般的な方法です。
リソースのみのDLLはサテライトDLLとよばれ、国際化対応アプリケーションではよく使
用されます。
http://msdn.microsoft.com/ja-jp/library/24b2tcy0.aspx
そうですか↑
非常に勉強になりました。
有難うございます。