FileNotFoundException ResourceManage :: GetString C ++ / CLI - PullRequest
0 голосов
/ 19 августа 2011

У меня есть MFC DLL с включенным CLR и использованием .Net v4.0 в VS2010 SP1.Я добавил новый файл управляемых ресурсов с именем ReportStrings.resx в корневой каталог проекта.Я использую код ниже для доступа к ресурсам.Независимо от того, что я положил в конструктор ResourceManger.Я получаю FileNotFoundException, когда вызывается rmResources-> GetString (sKey).Исключение говорит: «Не удалось найти файл« Report.resources ».»Я искал в моем приложении какие-либо ссылки на Report.resources и не нашел ни одного.Любая помощь будет признательна.

Спасибо, Джош

public ref class ResourceGetter
{
  static ResourceManager^ rmResources = gcnew ResourceManager("Report.ReportStrings", Assembly::GetExecutingAssembly());

  public:
    static String^ GetResource(String^ sKey)
    {
      String^ sReturn = nullptr;
      String^ sTheme = String::Empty;

      try
      {
        sReturn = rmResources->GetString(sKey);
      }
      catch (Exception^ ex)
      {
        ex;
      }

      return (sReturn == nullptr) ? "[" + sKey + " not found]" : sReturn;
    }
};

1 Ответ

0 голосов
/ 20 августа 2011

Хорошо, после создания нескольких тестовых проектов и воссоздания проекта приложения с нуля, я, похоже, нашел проблему. Если я инициализирую ресурсы в конструкторе приложения моего основного файла, все работает правильно. Например, мой проект называется Report, поэтому я добавляю код инициализации в конструктор CReportApp в файле Report.cpp, и все в порядке. Спасибо за вашу помощь, Ханс Пассант. Мой код ниже:

ResourceGetter.h

#pragma once
using namespace System;
using namespace System::Resources;

public ref class ResourceGetter
{
  static ResourceManager^ rmResources = nullptr;

  public:
    static ResourceGetter()
    {
    }

    static void Initialize()
    {
      if ( rmResources == nullptr )
      {
        rmResources = gcnew ResourceManager("Report.ReportStrings", Assembly::GetExecutingAssembly());
        ResourceProxy::Initialize(gcnew Mnc::Utilities::GetResourceDelegate(&ResourceGetter::GetResource));
      }
    }

    static String^ GetResource(String^ sKey)
    {
      String^ sReturn = nullptr;

      try
      {
        if ( rmResources != nullptr )
          sReturn = rmResources->GetString(sKey);
        else
          System::Diagnostics::Debug::WriteLine("Failed to retrieve resource (" + sKey + "): Returned null.");
      }
      catch (Exception^ ex)
      {
        ex;
      }

      return (sReturn == nullptr) ? "[" + sKey + " not found]" : sReturn;
    }
};

Report.cpp

CReportApp::CReportApp()
{
  ResourceGetter::Initialize();
}
...