Visual-C ++中My.Resources的等价物是什么?

时间:2011-06-30 20:56:36

标签: vb.net visual-c++ resources c++-cli

我需要遍历项目中的所有资源并基本输出其名称。我在VB中完成了这个。但我无法弄清楚在VC ++中My.Resources.ResourceManager的等价物是什么。

这是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);

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

我想你只是想:

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

答案 1 :(得分: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"));

对于托管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替换为您尝试抓取的资源的名称。再一次,我假设你正试图抓住它的图像资源。