Ressource type not found!



  • Hallo, Dank eines genialen Tutorials von FLipcode bin ich nun regioned windows am skinnen.
    Ne?
    Und obiger Fehler, auch unter 1813 bekannt tritt einfach immer auf, Ich weiss echt nicht wieso.Hier mal die drei beteiligten Datein. Hoffe, einer von Euch weiss eine Lösung:
    ----------

    // flip_MAIN.cpp
    #define STRICT
    #include<windows.h>
    #include "flip.h"
    //---------------preprocessing--------------------------------------------------
    LRESULT CALLBACK MessFunc(HWND, UINT, WPARAM,LPARAM);
    char szApNa[] = "Regions---the first trial";
    HBITMAP hskin;
    //------global vars and funcs---------------------------------------------------
    int WINAPI WinMain(HINSTANCE hiact,HINSTANCE hiprev, LPSTR cmdline, int showhow)
    {
      MSG mess;
      WNDCLASS wcx;
      HWND thisone;
    
      wcx.cbClsExtra = 0;
      wcx.cbWndExtra = 0;
      wcx.hInstance = hiact;
      wcx.lpfnWndProc = MessFunc;
      wcx.lpszClassName = szApNa;
      wcx.lpszMenuName = NULL;
    
      wcx.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(120,140,200));
      wcx.hIcon = LoadIcon(NULL,IDI_EXCLAMATION);
      wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
      wcx.style = CS_VREDRAW | CS_HREDRAW;
    
      if(!RegisterClass(&wcx))
      {
        MessageBox(NULL,"Error occured", "Registration failed",MB_OK);
        return 0;
      }
    
      thisone = CreateWindow( szApNa, szApNa,
                              WS_OVERLAPPEDWINDOW,
                              CW_USEDEFAULT,CW_USEDEFAULT,200,200,
                              NULL,
                              NULL,
                              hiact,
                              NULL
                            );
      ShowWindow(thisone,showhow);
      UpdateWindow(thisone);
    
      while(GetMessage(&mess,NULL,0,0))
      {
        TranslateMessage(&mess);
        DispatchMessage(&mess);
      }
      return mess.wParam;  
    }
    LRESULT CALLBACK MessFunc(HWND mwinhan,UINT mcode, WPARAM wm_Wflags,LPARAM wm_Lflags)
    { 
    
      POINT a,b,c,d,e,f,g,h;
            a.x=80;  a.y=0;
            b.x=140; b.y=0;
            c.x=180; c.y=40;
            d.x=180; d.y=120;
            e.x=140;  e.y=160;
            f.x=80;  f.y=160;
            g.x=40;  g.y=120;
            h.x=40;  h.y=40;        
    
      switch(mcode)
      {
    
        case WM_CREATE:
        {    
            const POINT pt[] = {a,b,c,d,e,f,g,h};                        
            HRGN rg1 = CreatePolygonRgn(pt,8,ALTERNATE);
            SetWindowRgn(mwinhan,rg1,true);
            DeleteObject(rg1);           
            HBITMAP hskin = LoadBitmap(GetModuleHandle(NULL),
                                        MAKEINTRESOURCE(IDI_BMP));
            char ch[10];                                    
            if(!hskin)
            {            
                MessageBox(NULL,itoa(GetLastError(),ch,10),"Error",MB_OK);
            return 0;
            }    
    
         break;
        }
        case WM_LBUTTONDOWN:
        {
        break;
        }
        case WM_MOUSEMOVE:
        {
        break;
        }
        case WM_PAINT:
        {
    
        break;
        }      
        case WM_DESTROY:
        {
          PostQuitMessage(0);
          return 0;
        }
      }
    
      return DefWindowProc(mwinhan,mcode,wm_Wflags,wm_Lflags);  
    }
    

    ----

    // flip.rc
    #include<windows.h>
    #include<flip.h>
    IDI_BMP                BITMAP         "Skin1.bmp"
    

    ----

    //flip.h
    #define IDI_BMP         101
    

    Mir wäre echt geholfen, wenn jemand das lösen könnte.
    Danke schonmal.


  • Mod

    Öffne mal die EXE selbst in der IDE und schau mal rein ob diese Bitmap wirklich auch in der EXE drin ist.


  • Mod

    BTW: Ich würde hiact in einer globalen Variable g_hInstance speichern und nicht GetModuleHandle(NULL) verwenden.



  • Das mit der globalen Variable habe ich auch schon versucht.
    Nix, ich habe sogar die LoadBitmap in die WinMain selber gepackt, das wiederum löste ein INVALID HANDLE- error aus.

    Aber das mit der exe selber öffnen?
    Ist die nicht binär? Wie soll ich denn da die Skin1.bmp WÖRTLICH finden?
    Danke bereits.


  • Mod

    Die IDE kann eine EXE öffnen und die darin enthaltenen Ressourcen anzeigen. Du müsstest in der EXE eine Bitmap mit der DI 101 finden!



  • Ich dacht immer, einmal binär bleibt binär und nur das dissasemblen wäre noch eine Lösung, das irgendwie zurückzubekommen.
    Da fällt mir ein: Es gibt ( und soll ja nicht gehen ) keinen Parser, der etwas dissassembliertes in c-code übersetzt. Das wär sicher mal n Projekt wert.
    Sone Art c-Recoder.
    ....
    Aber falls ich die ID 101 NICHT in meiner Exe finde, dann kann ich davon ausgehen, dass der binder die nicht zusammen gebunden hat.
    Aber aus welchem Grund sollte er das nicht tun?
    Wenn ich bei dev-cpp mein Projekt auf habe, aud Datei-> neu-> Ressource gehe, dann fragt mich dev-cpp sowieso, ob ich die neue Ressource dem Projekt hinzufügen will. Das habe ich bisher immer bejaht.

    Ich sehe heute mal nach.



  • me-S-on schrieb:

    Ich dacht immer, einmal binär bleibt binär und nur das dissasemblen wäre noch eine Lösung, das irgendwie zurückzubekommen.

    Das gilt für den Code, aber nicht für die Ressourcen (die werden gesondert in die EXE reingepackt)

    Da fällt mir ein: Es gibt ( und soll ja nicht gehen ) keinen Parser, der etwas dissassembliertes in c-code übersetzt. Das wär sicher mal n Projekt wert.
    Sone Art c-Recoder.

    Ich wünsche dir viel Erfolg mit dem Vorhaben 😉 (es hat schon seine Gründe, warum es das noch nicht gibt)



  • bin sicher nicht der Erste, dem sowas einfällt.
    Aber nichts ist unmöglich.
    Das ist gerade beim programmieren wirklich fakt.
    Irgendwie kricht man immer alles geprutscht.
    Und ich hoffe, ich kriege das mit den Ressourcen erstmal geprutscht.
    Bis dann ! 😃
    ->
    Edit:

    Da bin ich wieder und muss sagen: Die .exe weisst tatsächlich KEINE ID 101 auf, kein BMP oder IDI_BMP.
    Wieso?
    Ich habe es so verwendet, wie immer, und alle Projekte, in denen ich Menüressourcen verwendet habe, funktionieren.
    Warum dies nicht?
    Dev-Cpp erstellt ja immer noch ne eigene private.rc und private.h.
    In diese private rc schreibt er das icon rein, das man bei "Projekt Optionen" zuweisen kann.
    Allerdnigs steht, falls ich eigene .rc's und .h's erstelle, dann auch immer

    #include "meineeigene.rc"
    

    Und ich schätze, dadran liegt es.
    Denn das Programm kompiliert nicht, da mir gesagt wird:
    ress.h folder or file not found.
    Das ist die.h , welche von meiner eigenen .rc inkludiert wird , in welcher also das

    #define  IDM_BMP     101
    

    steht.
    Kommentiere ich diese Zeile aus der private.rc raus, dann kompiliert das Programm , wird aber mit der Fehlermaldung 1813 ausgeführt.
    ---
    Was muss ich tun? Mit den Menüs läuft das doch auch nicht so ab?
    Bin sehr verwundert!!!
    Danke.

    ---

    edit:
    ICH muss mich entschuldigen!!!!!!
    #include<meineeigene.rc>
    muss
    #include "meineeigene.rc"
    heissen!!!!
    SORRY vielmals!


Anmelden zum Antworten