JPG in Assembly einbetten... Wie?



  • Hi,

    ich habe das Problem, dass ich unter Visual C++ 2005 (Express) in einer CLR-Anwendung eine JPG-Datei so einbinden möchte, dass sie bei der Kompilation mit in die Assembly geschrieben wird und ich sie später über einen ManifestResourceStream rauslesen kann.

    Wie ich etwas einmal Eingebettetes im Programm einlese, ist kein Problem, ich weiß nur nicht, wie ich mein Projekt zu konfigurieren habe, dass er das JPG-Bild einbettet. Den Punkt "Eingebettete Ressource" wie bei C# finde ich irgendwie nicht.

    Weiß da einer was? Würde mir echt helfen.

    Nid.



  • ➡ http://www.aisto.com/roeder/dotnet/ ➡ Resource for .NET ➡ Ressourcendatei erstellen ➡ einbinden 💡



  • helpher schrieb:

    ➡ http://www.aisto.com/roeder/dotnet/ ➡ Resource for .NET ➡ Ressourcendatei erstellen ➡ einbinden 💡

    Vielen Dank schonmal, aber gibt es keine Methode, die ich direkt über Visual C++ 2005 Express anwenden kann, ohne auf "fremde" Programme zugreifen zu müssen?

    Nid.



  • "Project|Add New Item..." => Resource (Assembly Resource File (.resx)

    In dem dann erscheinenden Resource-Editor oben auf "Add Resource|New Image|JPEG Image..." gehen und dieses hinzufügen.

    Jetzt kannst Du normal über den ResourceManager zugreifen...



  • Jochen Kalmbach schrieb:

    "Project|Add New Item..." => Resource (Assembly Resource File (.resx)

    In dem dann erscheinenden Resource-Editor oben auf "Add Resource|New Image|JPEG Image..." gehen und dieses hinzufügen.

    Jetzt kannst Du normal über den ResourceManager zugreifen...

    Super! Danke!

    Genau so macht es ja auch der Designer bei den Forms. Manchmal sieht man auch vor lauter Bäumen den Wald nicht.

    Ich habe jetzt nur noch ein anderes Problem. Der Designer bindet die resx-Dateien ja immer an eine Klasse, deren Typ bei der Erzeugung des Resource-Managers angegeben wird.

    Wenn ich aber einfach eine resx-Datei in mein Projekt einfüge, welchen Typ übergebe ich dem ResourceManager?

    Grüße
    Nid.



  • Also, wenn das Projket z.B. "MCCP_Console" heisst, und die Resource heisst "MyRes", dann musst Du also Namen "MCPP_Console.MyRes" angeben.
    Das kannst Du auch einfach verifizieren, indem Du in das Debug/Release verzeichnis schaust. Da müsste es eine Datei mit dem Namen "MCPP_Console.MyRes.resources" geben.
    Verwenden tue ich das ganze bei mir so:

    System::Resources::ResourceManager ^rm = gcnew System::Resources::ResourceManager("MCPP_Console.MyRes", System::Reflection::Assembly::GetEntryAssembly());
      String ^str = rm->GetString("String1");
    


  • Jochen Kalmbach schrieb:

    Also, wenn das Projket z.B. "MCCP_Console" heisst, und die Resource heisst "MyRes", dann musst Du also Namen "MCPP_Console.MyRes" angeben.
    Das kannst Du auch einfach verifizieren, indem Du in das Debug/Release verzeichnis schaust. Da müsste es eine Datei mit dem Namen "MCPP_Console.MyRes.resources" geben.
    Verwenden tue ich das ganze bei mir so:

    System::Resources::ResourceManager ^rm = gcnew System::Resources::ResourceManager("MCPP_Console.MyRes", System::Reflection::Assembly::GetEntryAssembly());
      String ^str = rm->GetString("String1");
    

    Danke, das hat soweit problemlos geklappt. Ich kann auf die Ressource zugreifen, nur: Sie scheint nicht eingebettet zu sein, denn wenn ich die exe verschiebe und starte, bekomme ich eine FileLoadException.

    Ich habe auch schon in den Projekteigenschaften unter Linker/Eingabe/Verwaltete Ressourcendatei einbetten die resx-Datei angegeben, aber das hat auch nicht geholfen.

    Wenn das nicht mit dem Einbetten gehen sollte, welche Dateien muss ich denn wohin mitkopieren? Das Kopieren der *.resources-Dateien hat auch nicht geholfen.

    Vielen Dank für deine Mühe
    Nid.



  • Also bei mir geht es ohne Probleme... Wohin hast Du sie denn kopiert? Und wie sieht die genaue Fehlermeldung aus?



  • Jochen Kalmbach schrieb:

    Also bei mir geht es ohne Probleme... Wohin hast Du sie denn kopiert? Und wie sieht die genaue Fehlermeldung aus?

    Gute Fragen. Die hätte ich mir besser auch mal gestellt!
    Ich Blödmann habe die exe auf ein Netzlaufwerk kopiert, aber nicht daran gedacht, die Codezugriffsberechtigung fürs Intranet anzupassen.

    Es läuft jetzt alles einwandfrei!

    Nochmals vielen Dank!

    Nid


Anmelden zum Antworten