API's dynamisch laden



  • Hallo,
    da ich meine Programme etwas professioneler gestalten will habe ich mir gedacht die API's einfach dynamisch zu laden.
    Aber wie mache ich das jetzt?
    Und wie sorge ich dafür das wenn ne API nicht geladen werden konnte diese nicht im Programm benutzt wird?
    Will ja kein Programmabsturz.
    😉



  • Welchen Sinn soll denn das haben? Professioneller wird es damit auf keinen Fall, für jede Funktion erstmal GetProcAdress aufzurufen. Du produzierst nur einen Haufen unnützen Programmcode. Und kleiner wird es damit schon gar nicht.

    Die API ist ohnehin in 3 dll gelagert, die nur statisch verlinkt werden. Das machen Profis auch nicht anders.



  • Ja ein Freund hatte mir diesen Tipp gegeben.
    Falls eine API nicht vorhanden sei auf dem System das das ganze Programm nicht abstürtzt.



  • Was denn für ne API? WINAPI?

    Professioneller wird es damit auf keinen Fall, für jede Funktion erstmal GetProcAdress aufzurufen

    Muss nicht unbedingt sein. prinzipiell kann man über ein Abstraktes Interface gehen. Da benötigt man nur eine Funktion die eine Instanz erzeugt. Dann muss man nur einmal GetProcAddress verwenden und der Rest geht über das Interface



  • Irgendeine API Funktion z.B ShellExecute oder CreateProcess.
    Halt Funktionen die mein Programm verwendet.



  • Also WINAPI.
    Die gibt es auf jedem PC mit Windows (MSDN beachten), darum muss man sich nicht kümmern.



  • Das brauchst du nur bei Funktionen zu machen, die nicht auf allen Windows Versionen vorhanden sind.



  • Das brauchst du nur bei Funktionen zu machen, die nicht auf allen Windows Versionen vorhanden sind.

    Das sind dann schon ne Menge Funktionen.
    Kann ich das dann so machen indem ich ne Funktion schreibe und diese Funktion die WinApi's läd und ich dann auf die geladenen Api's aus ner anderen Funktion zugreifen kann?
    So meine ich das:

    int load_dll() {
    //hier werden api's geladen...
    }
    
    int main() {
    //hier wird auf die geladenen api's zugegriffen
    //wie mache ich es aber jetzt das das Programm nicht abstürtzt wenn die //Funktion nicht geladen werden konnte?
    }
    


  • Warum eigentlich der ganze Aufwand?
    Was passiert denn, wenn eine DLL nicht gefunden wurde?
    Das Programm meldet "BlaBlub.dll nicht gefunden!" Da ist es auch klar, dass es nicht läuft.

    Einzelne Funktionen zu überprüfen, halte ich für schwachsinnig, denn es wird keiner eine DLL ausliefern, die an Funktionen gekürzt worden ist.

    Ansonsten haben Libs wie DirectX immer verschiedene Versionen von DLLs. Zum Beispiel "d3d9_31.dll" und "d3d9_32.dll" -> Verschiedene Versionen, von denen ein Programm nur eine benutzt.

    Wenn du wirklich auf Nummer sicher gehen willst, dann schreib einen Launcher.
    Dieser überprüft ob all DLLs da sind und startet das Programm.
    Du kannst auch noch Optionen und Anleitungen einbauen, so wie es moderne Spiele machen.
    Der User startet dann den Launcher und er Launcher das Programm.


Anmelden zum Antworten