Externe Module in einem C-Programm Dynamisches Laden?
-
03-07-2019 - |
Frage
Ich bin sicher, dass dieses Problem gelöst ist, bevor und ich bin gespannt, wie ihre getan. Ich habe Code, in dem, wenn ausführen, ich den Inhalt eines Verzeichnisses und Last in Funktionalität scannen möchten.
Insbesondere ich mit einer Scripting-Engine arbeite, die ich Funktion aufruft, um hinzuzufügen Lage sein will. Ich möchte, dass die Core-Engine sehr begrenzte Funktionalität bereitzustellen. Der Benutzer sollte zusätzliche Funktionen durch 3rd-Party-Bibliotheken hinzufügen können, die ich der Motor und Last überprüfen möchten. Wie wird das gemacht?
Lösung
Es hängt von der Plattform. Auf win32, rufen Sie LoadLibrary
eine DLL zu laden, dann Funktionen von ihm mit GetProcAddress
bekommen. Auf Unixy Plattformen sind die Äquivalente dlopen
und dlsym
.
Andere Tipps
Sie können die POSIX verwenden dlopen / dlsym / dlerror / dlclose Funktionen in Linux / UNIX dynamisch gemeinsam genutzten Bibliotheken öffnen und Zugriff auf die Symbole (einschließlich Funktionen) sie bieten, finden Sie in der Manpage .
Wenn Sie eine Bibliothek für diese verwenden möchten, würde ich GLib (das Dienstprogramm-Bibliothek, die unter dem GTK + UI-Toolkit liegt) empfehlen. Es verfügt über die " GModule " Unter API, die dies zu tun, eine saubere, tragbare Art und Weise zur Verfügung stellt. Dies erspart Ihnen, die entsprechenden Anrufe selbst zu wickeln, und bringt Sie auch den Rest GLib das ist sehr praktisch in C-Programmen jeder Größe zu haben.