2011-06-30 11 views
0

プロジェクトのすべてのリソースを繰り返し処理し、基本的に名前を出力する必要があります。私はこれをVBで行いました。しかし、私は、My.Resources.ResourceManagerに相当するものがVC++であることを理解できません。Visual C++のMy.Resourcesに相当するものは何ですか?

ここに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); 

これを理解してください。あなたのリソースを一致させるタイプとRESOURCEIDを変更する必要があります

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

+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++のために、以下のようなものを使用することができます。確かにその画像やアイコンやリソースのどのような場合には、しかし、あなたのようなもの使用しないで、次のような何かをしようと、マネージドC++の場合は

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

を:

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

@ハンス:彼はマネージドC++を使用しているとは思わなかった。 – Icemanind

+0

を反映するように私の答えを更新しました。質問のコードに基づいて、C++/CLIではなく "Managed Extensions for C++"ではないので、提案されたコードはあまり良くありません(構文が変更されました)。 @if_zero_equals_oneはおそらく翻訳を理解することができますが、もっと簡単な方法があると思います。 –

関連する問題