2013-05-26 59 views
0

我一直在使用C#一段時間,而且我正嘗試用C++編寫一個.NET應用程序。在C#中,我能夠很容易地從代碼中訪問受管資源,資源文件的名稱有點像一個類,所以如果我在名爲cba.resx的資源文件中有一個名爲「abc」的字符串,只需寫入cba.abc從資源文件返回字符串。即使智能感知也適用於它。同樣的東西適用於圖標等。在C++/CLI中訪問嵌入式資源

是否有可能在C++中做同樣的事情,如果是這樣,如何?或者,如果沒有,在資源文件中訪問字符串/圖標的最簡單方法是什麼?

+1

的C++ IDE缺少資源設計,這使得它很容易在C#中的小工具。你必須自己編寫代碼。或者使用非託管資源編輯器。請注意,C++/CLI是一種互操作語言,它不太適合編寫完整的程序。 –

回答

4

在Visual Studio中,C#項目有一個resx文件設計器和一個屬性類生成器。 C++/CLI項目僅獲取resx文件設計器。兩者都獲得構建步驟以將編譯的資源嵌入到程序集中。

你可以寫一個屬性自己的類或剛剛訪問資源的代碼,你需要他們這樣的:

auto resourceAssembly = Reflection::Assembly::GetExecutingAssembly(); 
// .Resources is the name generated by resxgen, e.g., from the input file name Resources.resx 
auto resourceName = resourceAssembly->GetName()->Name + ".Resources"; 
auto resourceManager = gcnew Resources::ResourceManager(resourceName, resourceAssembly); 
auto String1 = cli::safe_cast<String^>(resourceManager->GetObject("String1")); 
+0

謝謝,我可以自己編寫屬性類,所以它現在就像在C#中一樣工作,更容易處理:) – CivDav

+0

這對我不起作用,因爲資源名實際上是{{RootNamespaceName}}的.resources。現在,如果您的根名稱空間與您的程序集名稱匹配,則此代碼應該可以工 –