我有一个启用CLR的MFC DLL,并在VS2010 SP1中使用。net v4.0。我添加了一个名为ReportStrings的新托管资源文件。到项目的根目录。我使用下面的代码来访问资源。无论我在ResourceManger构造函数中放入什么。当rmResources->GetString(sKey)被调用时,我得到一个FileNotFoundException。异常提示"找不到文件'Report.resources'"。我在我的申请表上搜索了关于报告的任何参考资料。资源和没有找到任何。如有任何帮助,我将不胜感激。
谢谢,Josh
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;
}
};
好的,在创建了几个测试项目并从头开始重新创建我的应用程序项目之后,我似乎已经找到了问题。如果我在主文件的应用构造函数中初始化资源,一切都会正常工作。例如,我的项目名为Report,因此我将初始化代码添加到Report.cpp文件中的CReportApp构造函数中,一切正常。谢谢你的帮助,汉斯·帕桑特。我的代码如下:
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();
}