Resource und MAKEINTRESOURCE



  • Guten Tag,

    AUf Resourcen greife ich so zu:

    HRSRC rsrc;
    rsrc = FindResource(HInstance, MAKEINTRESOURCE(google), RT_RCDATA);
    

    MAKEINTRESOURCE(google), dabei wird nun auf die definierte Resource google zugegriffen, das ist bei mir eine Datei, vom Typ "RCDATA", wobei dies nichts zur Sache tut.

    const char* lpName, so sagt der BCB, dass es vom Typ sein soll.

    Ich wollte nun dass MAKEINTRESOURCE(AnsiStringVariable) so aufgerufen werden soll. Naja nicht direkt so!
    Ach ich gebe einfach mehr code aus, so dass man mir besser helfen kan.

    AnsiString AnsiStringVariable = "google";
    const char * var = AnsiStringVariable.c_str();
    
    HRSRC rsrc;
    
    rsrc = FindResource(HInstance, MAKEINTRESOURCE(var), RT_RCDATA);
     DWORD Size = SizeofResource(HInstance, rsrc);
    HGLOBAL MemoryHandle = LoadResource(HInstance, rsrc);
    if(MemoryHandle != NULL) {
    // tue was ich nun machen will
    } else {
    // hier sollst du nicht
    }
    

    Aber genau im else landet es!!!!

    steht hingegen nicht die variable, sondern wie in vorhirgem Beispiel google, so tut das wie es sein soll.

    Wieso funktioniert das denn nicht??



  • Vielleicht helfen dir die Anmerkungen zur Konvertierung AnsiString -> char* in der FAQ ja weiter.



  • Hallo Jansen,

    nun auch diese Umwandlung hat nicht geklappt. Vielleicht liegt das auch darn, dass ein const char *, verlang wird, ich aber nur einen char * erzeugen konnte.
    aber ansonsten glaube ich auch nicht, dass es an der konvertierung liegt. Schließlich sagt der Builder nicht, dass es irgendwo Probleme gibt.

    Ich hab aber ne neue Sache entdeckt.

    UINT var=AnsiStringVariable;

    Bloß muss jetz 'AnsiString' nach 'unsigned int' konvertiert werden.
    bloß ein ToInt() geht verständlicherweise nicht, weil das ja keine Zahl ist. Zahlen selber kann ich auch nicht als Identifizierer erstellen.



  • Bist du sicher, dass const notwendig ist?



  • Schon mal die Hilfe von MAKEINTRESOURCE und FindResource durch gelesen ?
    Verrate uns doch mal wie die ResourceID definiert ist.



  • Jansen schrieb:

    Bist du sicher, dass const notwendig ist?

    Nun, so wird das von BCB geschrieben.
    Ich schreibe FindResource mache dann die Klammer auf und warte, dann sagt mir BCB von welchem Typ das sein soll, und da wird const eben mit angegeben.
    Wobei das genauso gut auch ohne const geht. Also keine Build Fehler, aber dann gehts eben trotzdem nicht.

    case schrieb:

    Schon mal die Hilfe von MAKEINTRESOURCE und FindResource durch gelesen ?
    Verrate uns doch mal wie die ResourceID definiert ist.

    Ja Hilfe schon durchgelesen, aber nunja. Auf Variablen wird ja nicht eingegangen, sondern nur allgemein. Was ja verständlich ist.

    Wie ich das mache:
    Über den Projektmanager habe ich die resource.rc eingefügt
    dann in der Unit.h steht noch diese Zeile:
    #include "resource.rh"

    Inhalt der resource.rc schrieb:

    #include "resource.rh"

    google RCDATA "src\\GoogleToolbar1.dll"

    Inhalt der resource.rh schrieb:

    #ifndef RESOURCE_RH
    #define RESOURCE_RH

    #define google 1

    #endif

    Ich hoffe das war verständlich 🙂
    Danke für die Hilfe :p



  • #include "resource.rh" 
    
    HRSRC rsrc = FindResource(HInstance, MAKEINTRESOURCE(google), RT_RCDATA);
    DWORD Size = SizeofResource(HInstance, rsrc);
    HGLOBAL MemoryHandle = LoadResource(HInstance, rsrc);
    // Rest wie gehabt
    

    google ist hier doch hier als Zahlenwert schon definiert.
    Das Kram mit dem String ist kompletter Unsinn.

    LPTSTR MAKEINTRESOURCE(WORD wInteger	
    // integer to convert 
    );
    

    Wenn man sich die Definition des Makros MAKEINTRESOURCE ansieht, sieht man doch das hier
    nur ein unsigned int als Inputparameter rein kommen kann (steht übrigens auch dabei) oder hast du eine andere Hilfe ?
    Desweiteren sollte man defines groß schreiben also in der Art:

    #ifndef RESOURCE_RH
    #define RESOURCE_RH
    
    #define GOOGLE_RESOURCE_ID 1
    
    #endif
    

    Natürlich dann im obigen Quelltext google durch GOOGLE_RESOURCE_ID ersetzen.



  • Danke für deinen Beitrag!

    unsigned int, das wusste ich schon, bloß ist das so nichtssagend - finde ich zumindest. Was bedeutet denn unsigned int?

    Mir war schon klar, dass das mit dem AniString sozusagen quatsch ist. bloß möchte ich dies, dass Dateien aus der Resource geladen werden in eien Funktion schreiben. Und eben dieses eine welche, soll über einen Paramter übergeben werden. Deswegen muss das ja dann umwandeln von AnsiString nach eben dem was gerade benötig ist. Sei es char * bzw unsigned int.

    Mit dem Wissen ist es also doch nicht mehr vollkommener Schwachsin.
    Denn in irgendeine Variable muss ich das ja packen, was ich übergeben will. Ansich ist es mir vollkommen egal, von welchem Typ das ist.

    OK das mit dem Großschreiben geht klar!

    Aber ich denke du bist nun auch schon so vertief in den Resource, dass es dir bestimmt gelingt dir bei meinem Problem zu helfen.



  • Danke, durch deine hilfe doch geschafft.

    LPTSTR MAKEINTRESOURCE(WORD wInteger    
    // integer to convert 
    );
    

    das wars !!!
    fuck, wieso hab ich das in meiner Hilfe nicht gefunden?

    Nun geht alles wunderprächtig



  • Heute habe ich leider erfahren, dass dies nun doch nicht geht.
    Ich MUSS AnsiString nach etwas brauchbarem konvertieren.
    Also z.B. nach unsigned int.

    Meine konkrete Frage nun, wie schaffe ich dies

    AnsiString baba = "hallo";
    unsigned int = bubu.???;
    

    Oder noch ne Frage, wie zeit mir das die Hilfe, wie ich sowas konvertieren könnte. Bin bisher nicht schlau geworden.
    Übrigens, ich habe nun den Eintrag gefunden

    LPTSTR MAKEINTRESOURCE(WORD wInteger
    // integer to convert
    );

    🙄

    Danke


Anmelden zum Antworten