2011-06-30 4 views
0

Мне нужно перебирать все ресурсы в проекте и в основном выводить их имена. Я сделал это в VB. Но я не могу понять, что эквивалент My.Resources.ResourceManager находится в VC++.Что такое эквивалент My.Resources в Visual C++?

Вот код VB.

Dim objResourceManager As Resources.ResourceManager = My.Resources.ResourceManager 
Dim objResourceSet As Resources.ResourceSet = objResourceManager.GetResourceSet(CultureInfo.CurrentCulture, True, True) 
Dim iterator As IDictionaryEnumerator = objResourceSet.GetEnumerator() 

Private Sub go() 
    Dim s As String = iterator.Key 
    Debug.WriteLine(s) 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    If iterator.MoveNext Then 
     go() 
    Else 
     iterator.Reset() 
     If iterator.MoveNext Then 
      go() 
     Else 
      Throw New Exception("No elements to display") 
     End If 
    End If 
End Sub 

И вот как далеко я нахожусь в VC++.

private: 
     Resources::ResourceManager^ rmgnr; 
     Resources::ResourceSet^ rSet; 
    public: 
     Form1(void) 
     { 

      rmgnr = gcnew System::Resources::ResourceManager(L"Resources ProjectCPP",Reflection::Assembly::GetExecutingAssembly()); 
      //This is the problem as I can't find the equivalent in c++ 
      rSet = rmgnr->GetResourceSet(CultureInfo::CurrentCulture,true,true); 

Пожалуйста, помогите мне разобраться в этом.

+1

Это не конкретный ответ, но 'My' имен определяется в' Microsoft.VisualBasic' сборки. Добавьте ссылку на нее, и вы должны иметь доступ к этому пространству имен. –

+0

Как я могу добавить эту ссылку? Потому что я в основном пробовал все, что я могу логически придумать. –

+0

Является ли это проектом C++/CLI или полностью неуправляемым C++? –

ответ

2

Я думаю, что вы просто хотите:

rmgnr = gcnew System::Resources::ResourceManager(GetType()); 
+0

Что именно меня доставит? то есть, что получает GetType()? –

+0

@if_zero_equals_one: ResourceManager ищет ресурсы в той же сборке и пространстве имен, что и предоставленный тип. 'GetType()' работает в обычном случае, когда вам нужны ресурсы из той же сборки, что и ваш класс. –

0

Вы можете использовать что-то вроде следующего для неуправляемого C++:

HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(resourceId), type); 
HGLOBAL hRes = LoadResource(hInstance, hResInfo); 
LPVOID memRes = LockResource(hRes); 
DWORD sizeRes = SizeofResource(hInstance, hResInfo); 

Вам нужно будет изменить тип и RESOURCEID, чтобы соответствовать вашему ресурсу. Не уверен, что, если его изображение или значок или какой вид ресурса, но вы бы использовать что-то вроде:

FindResource(hInstance, MAKEINTRESOURCE(bitmapId), _T("PNG")); 

Для Managed C++, попробовать что-то вроде следующего:

Bitmap *MyBitmap; 
String *Msg; 
Reflection::Assembly *MyAssembly; 
IO::Stream *ResourceStream; 

MyAssembly = System::Reflection::Assembly::GetExecutingAssembly(); 
ResourceStream = MyAssembly->GetManifestResourceStream(ImageName); 

if (ResourceStream != NULL) 
{ 
    MyBitmap = new Bitmap(ResourceStream); 
    Msg = String::Format("GetIcon: {0}, OK", ImageName); 
} 
else 
    Msg = String::Format("GetIcon: {0}, Failed", ImageName); 

// MyBitmap countains your resource 

Вам нужно будет заменить ImageName с именем вашего ресурса, который вы пытаетесь захватить. Опять же, я принимаю его ресурс изображения, который вы пытаетесь захватить.

+0

Нет, управляемые ресурсы не имеют сходства с собственными ресурсами. –

+0

@Hans: Я не думал, что он использует управляемый C++. Я обновил свой ответ, чтобы отразить – Icemanind

+0

Основываясь на коде в вопросе, это явно C++/CLI, а не «Managed Extensions for C++», поэтому ваш предлагаемый код будет не очень хорошим (синтаксис изменился). Хотя @if_zero_equals_one, вероятно, мог бы вычислить перевод, я думаю, что есть намного более простой способ. –

Смежные вопросы