Bitmap->LoadFromResourceName(int(HInstance), ...) - Frage zu 1. Parameter [gelöst]



  • Hallo Gemeinschaft,

    es geht um den Parameter int(HInstance). Ich habe jetzt ewig in der WinAPI-Abteilung und allgemein im Netz umhergelesen und bin kein Stück weiter... ist Alles ziemlich verwirrend, manchmal hatte ich sogar das Gefühl es werden wiedersprüchliche Erklärungen geliefert... besonders bei dem Gerangel im WinAPI-Forum. Deswegen frage ich mal hier, an unabhägiger Stelle. Wenn ich diese Funktion aufrufe:

    Image->Picture->Bitmap->LoadFromResourceName(int(HInstance), AnsiString S);
    

    wofür steht int(HInstance)? Wo kommt HInstance her? Sollte es nicht als unsigned int übergeben werden (Hab' die Funktion aus einem Tutorial)?
    Kann mir es mal jemand so erklären, wie er/sie es einem Nicht-Programmierer erklären würde?

    Ich kann es ja mal kurz zusammenfassen, wie ich das verstanden habe: Die Funktion soll eine Resource aus einer Anwendung laden. Dazu muss sie wissen: 1. "welche Anwendung?" (HInstance) und 2. "welche Resource?" (AnsiString S). HInstance identifiziert also meine Anwendung eindeutig.

    Aber jetzt kommen halt Fragen auf: Woher kommt HInstance? Was steht da drin? Ist der Funktionsaufruf in dieser Form 100prozentig sicher?

    Die Funktion macht was sie soll, aber ich fühle mich irgendwie einer höheren Macht unterworfen, weil ich diesen Parameter nicht durchschaue...

    MfG

    Edit: Thread-Überschrift ergänzt



  • Hast du mal in der Hilfe zu HInstance geschaut? Da steht eigentlich alles erklärt.

    HInstance ist das Modulhandle. Damit sagst du der Funktion aus welchen Modul du die Ressource laden willst. Wenn die fest in dein Projekt eingebunden ist, dann ist es halt das Modulhandle deiner Applikation (globale Variable).
    Wenn du die Ressource in einer dll hast und daraus laden willst, musst du dir das Modulhandle für diese dll besorgen (gibt dir LoadLibrary).



  • Die Hilfe gibt mir eine Tabelle mit Windows-Datentypen, wenn ich in die Suche "HInstance" eingebe. Das war nicht sehr aufschlussreich.

    Wenn ich dich richtig verstehe, gibt es in der Anwendung automatisch eine globale Variable, welche das Modulhandle beinhaltet? Und wenn ich die Funktion LoadFromResourceName(1, 2) aufrufe, setze ich also nur diese globale Variable an Stelle 1 ein?



  • Genau.
    Welche Hilfe hast du denn? Beim BCB6 steht zu HInstance folgendes.

    Die Variable HInstance gibt das Handle an, das von Windows für ein Modul zur Verfügung gestellt wird.

    Unit
    SysInit

    Kategorie
    Anwendungen

    extern PACKAGE int HInstance;

    Beschreibung

    HInstance enthält das von Windows bereitgestellte Instanzen-Handle der Anwendung oder Bibliothek.



  • Braunstein schrieb:

    Welche Hilfe hast du denn?

    Ich hatte in die BDS2006-Hilfe geschaut... hat sich mal wieder als Fehler erwiesen.



  • Versuch dir eine Hilfe vom BCB6 zu besorgen und nutze die zuerst. Alternativ soll die Hilfe vom BCB2009 (mit den letzten Fixes) auch schon recht gut sein (sagt audicia).



  • Braunstein schrieb:

    Alternativ soll die Hilfe vom BCB2009 (mit den letzten Fixes) auch schon recht gut sein (sagt audicia).

    Ja, das Thema hatte ich ja gerade erst mit audacia durch. 🙂
    Es ist halt einfacher, die Hilfe der IDE nutzen zu können... Aber es scheint ja eine brotlose Kunst zu sein die Hilfe des BDS2006 nutzen zu wollen. 🙄

    Danke für deine Mühen! 🙂


Anmelden zum Antworten