2017-09-25 24 views
0

メインのWindowsフォーム(マネージC++)プロジェクトには、画像を表示または非表示にしてレスポンシブな図を作成するためのタイルが表示されるクラスがあります。外部から作成された.resxファイルからのリソースへのアクセス

私は私が正しい位置にすべての画像を得ることができます別のユーティリティアプリなどを作成したこのアプリは、C#で書かれており、次のコードスニペットを使用して、画像データと位置を含むの.resxファイルを書き込みされています

using(ResXResourceWriter resx = new ResXResourceWriter(sfd.FileName)) { 
    resx.AddResource("Size", canvas.Size); 
    List<int> IDs = canvas.IDs; 
    resx.AddResource("IDList", IDs); 
    resx.AddResource("BackgroundIndex", canvas.BackgroundIndex); 
    foreach(int id in IDs) { 
     String positionKey = String.Format("Position.id{0}", id); 
     String visibilityKey = String.Format("Visibility.id{0}", id); 
     String imageKey = String.Format("Image.id{0}", id); 
     resx.AddResource(imageKey, canvas.TileImage(id)); 
     resx.AddResource(positionKey, canvas.TilePosition(id)); 
     resx.AddResource(visibilityKey, canvas.TileVisible(id)); 
    } 
} 

テキストエディタで.resxファイルを開き、整形式であり、期待されるデータが含まれていることがわかります。

次に、その.resxファイルをメインアプリケーションのプロジェクトに追加します。今、私はそれの中のリソースを取得する方法を把握することはできません。私が試したコードは次のとおりです。 見つけることができませんでした:障害が

リソース負荷:実行時に

ResourceManager^image_rm = gcnew ResourceManager(
    "resx_file_name_without_extension", GetType()->Assembly); 
ResourceSet^image_rs = image_rm->GetResourceSet(
    System::Globalization::CultureInfo::CurrentCulture, true, true); 

、二行目(GetResourceSetコール)は、次のメッセージテキストでSystem.Resources.MissingManifestResourceExceptionをスローします指定された文化または中立文化に適したリソース。コンパイル時に "resx_file_name_without_extension.resources"が がアセンブリ "my_assembly"に正しく埋め込まれているか、またはリンクされていることを確認してください。または、 必要なすべてのサテライトアセンブリがロード可能で完全に署名されていることを確認してください。

私の問題は...疑いの余地があります。私は本当に分かりません。たぶん私はResourceManagerコンストラクタの正しい識別子を使用していないでしょう。私は明示的に "Build from Excluded from Build:No"と "Content:Yes"をファイルのプロパティに設定しようとしましたが、効果はありませんでした。

外部で作成した.resxファイルをプロジェクトにドロップして、その中のリソースにアクセスすることはできますか?私は間違いなくコンパイルする必要があります。私は迷惑な.resxファイルで製品を出荷することはできません。私は常に.cppファイル内に静的データオブジェクトのセットを作成できますが、.resxアプローチはよりエレガントに見えます...

答えて

0

コメントは、this unanswered questionのコメントになります。識別子にルート名前空間を付加することResourceManagerを幸せに作られた:コンパイラは、その名前空間内のリソースを配置することを決め

ResourceManager^image_rm = gcnew ResourceManager(
    "my_root_namespace.resx_file_name_without_extension", GetType()->Assembly); 
ResourceSet^image_rs = image_rm->GetResourceSet(
    System::Globalization::CultureInfo::CurrentCulture, true, true); 

どれだけか、なぜまだ私には謎のビットですが、それは別の日のトリビアです。

私がリンクする質問には、プロジェクト内でVSで作成された.resxが含まれています。私は外部で作成したものを追加することになりますので、別のQ/Aを保証するのに十分な状況ではないと思います。

関連する問題