Anfängerfrage zu libs
-
Ist es eigentlich möglich, zur Laufzeit die verwendete library zu wechseln.
Also angenommen, das Programm verwendet alle Funtionen aus a.lib, ich drücke einen Knopf und dann werden die Funtionen aus b.lib genommen?Bitte nicht hauen, falls die Frage allzu dämlich ist
-
Bei statischen Librarys geht das nicht! Bei dynamisch ladbaren, sollte es waehrend der Laufzeit auch schlecht möglich sein (ausser du regelst das im Programm Code), da die Library ja in den Speicher geladen wird und nicht fuer jeden Funktionsaufruf neu.
-
das hängt vom os ab, welches benutz du den?
-
Also ich benutze WinXP, das Programm sollte sich aber auch auf Linux kompilieren lassen.
-
Mit dieser Frage bist du besser im WINAPI Forum aufgehoben.
Prinzipiell ist so etwas in Windows möglich. Für LINUX weis ich das nicht, kann mir aber schwer vorstellen das es nicht geht (Von wo kriegt wohl M$ seine Ideen)
In Windows musst du die DLL während des Programmlaufs explizit laden. Dies geschieht mit dem Funktionsaufruf Loadlibrary
Dann mußt du dir die Adressen der einzelnen Funktionen in der DLL verschaffen das geht mit GetProcAdress und wenn du die Library achlißen willst brauchst du noch free Library.Es wäre sinnvoll den Code dafür in eine eigene statische Library (*.lib) zu verpacken. Diese Lib schreibst du dann zweimal einmal mit
dem Windows spezifischen das andere Mal mit dem Unix spezifischen Code und schon kannst du dein Library Load verfahren in beiden
OS einsetzen. Vorraussetzung dafür ist das die Funktionsaufrufe der Beiden statischen libraries (einmal Windoof einmal Linux)
identisch sind.Mit dieser Methode kannst du dann während desBetriebs die Library a durch die Library b ersetzen.
An die Moderatoren. Ein verschieben nach WINAPI wäre sinnvoll
Danke
-
PAD schrieb:
An die Moderatoren. Ein verschieben nach WINAPI wäre sinnvoll
danke ich kann selber denken und ich denke wenn er den code unter linux compilieren will dann ist ihn mit winapi forum nicht gehollfen
Mick sag mal was du machen willst, vielleicht können wir dir ein anderen tipp geben den wie PAD schon gesagt hatt es ist ziemlich OS speziefisch
-
@Dimah Sorry, war nicht so gedacht, das ich denke das du nicht denken kannst.
Wollte es eher auffällig markieren, damit du nicht den ganzen thread lesen musst.
-
hmm, vielleicht sollte er einen Thread im WinAPI und einen im Linux Forum aufmachen
Also unter Linux kannst du die Funktionen dlopen(3), dlsym(3) und co benutzen um Librarys dynamisch zur Laufzeit zu laden.
-
vielleicht sollte er dies ganze lib austausch geschichte vergessen, stattdessen mit vererbung und virturen methoden arbeiten.
naja aber solange er nix sagt kann man ihn auch helfen
-
@Dimah wie soll das den gehen, irgendwann mußt du auf die Niederungen der OS-calls herabsteigen?
-
PAD schrieb:
@Dimah wie soll das den gehen, irgendwann mußt du auf die Niederungen der OS-calls herabsteigen?
ne so meine ich das nicht, wenn es ihn z.b. darum geht das lib a ausgaben in datei macht und lib b in die konsole dann wäre das ganze lauzeit libaustausch getue unnötig
-
Lib austauschen verwendet man z.B. bei Plugins.
Verschieben ist eigentlich nicht notwendig da die Antwort schon von PAD gegeben wurde und auch in den FAQ steht.