mikrocontroller.net

Forum: PC-Programmierung Frage zu dll


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich würde gern wissen was der Unterschied zwischen _declspec und 
extern "C"_declspec ist. Ich hab meine DLL mit allen beiden Varianten 
dynamisch eingeladen und konnte keinen Unterschied, abgesehen davon das 
der eine Ausdruck länger ist feststellen.

Grüsse

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
extern "C" deaktiviert das Name-Mangling des Linkers bei der Generierung 
von Symbolnamen.

Wie die Exporte Deiner DLL heißen, kannst Du mit

  dumpbin datei.dll /exports

herausfinden.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, muss ich gleich mal googlen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dumpbin ist Bestandteil der MS-Entwicklungsumgebung.

Aktuell zu finden unter Devstudio9\vc\bin

als Arbeitsverzeichnis aber sollte Devstudio9\Common7\IDE verwendet 
werden, da dort einige DLLs sind, ohne die dumpbin nicht funktioniert.

Alternative: Beide Verzeichnisse in %PATH% aufnehmen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder mal nach depends.exe suchen.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ist eigentlich der Unterschied zwischen einer statisch verlinkten 
und dynamisch verlinkten dll. ich weiss das man eine dynamisch verlingte 
dll, einladen kann während der Laufzeit eines programmabschnitts und 
danach wieder entladen, auch muss die DLL nicht existieren. Aber wie 
verhält es sich bei einer statischen DLL. Hab da zu leider nichts 
verständliches gefunden. Muss die DLL da schon beim compilieren meines 
Programms (wo die dll eingebunden ist) vorhanden sein. Wäre nett, wenn 
mir das einer sagen könnte

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DLLs werden immer zur Laufzeit geladen. Allerdings gibt es zwei 
unterschiedliche Mechanismen:

Was Du "statisch gelinkt" nennst, bedeutet, daß der Programmlader des 
Betriebssystems beim Starten des Programmes alle Abhängigkeiten des 
Programmes auflöst und erst bei vollständiger Befriedigung das Programm 
auch wirklich starten lässt.

Diese Abhängigkeiten lassen sich mit depends oder dumpbin anzeigen.

    dumpbin blafusel.exe /imports

Werden die Abhängigkeiten nicht erfüllt, so gibt der Programmlader eine 
entsprechende Fehlermeldung aus:

    "Die Anwendung konnte nicht gestartet werden,
    weil xyz.dll nicht gefunden wurde"

Bei der Programmerstellung werden die so verwendeten DLLs mittels 
sogenannter Importlibraries mit dem Programm verknüpft. Aus 
Programmierersicht entspricht das Verhalten so verwendeter DLLs dem 
tatsächlich statisch gelinkter Funktionen.
Wobei zum Compilieren und Linken nur die Importlibrary, nicht aber die 
DLL vorhanden sein muss.
Zum Laufenlassen des Programmes, was auch das Debuggen mit einschließt, 
muss die DLL aber zwingend vorhanden sein.


Das "dynamische Linken", wie Du es nennst, bedeutet, daß das Programm 
zur Laufzeit mit den Win32-API-Funktionen LoadModule und 
GetProcAddress arbeitet. Zunächst wird die DLL mit LoadModule 
geladen, dann werden Funktionspointer auf darin enthaltene Funktionen 
mit GetProcAddress bestimmt.

Das ist zwar von der Programmierung her erheblich aufwendiger als das 
einfache #include einer Headerdatei und Linken einer Importlibrary, 
bietet aber erheblich feinere Möglichkeiten der Fehlerbehandlung.

Ein so aufgebautes Programm funktioniert prinzipiell auch, wenn die DLL 
nicht vorhanden ist. Es kann ein intelligentes Versionsmanagement 
implementiert werden; ist die Funktion A vorhanden, aber nicht B, wird 
halt nur A verwendet.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein eine Statische dll muss immer zur laufzeit vorhanden sein. Beim 
Compilieren braucht man nur die lib.
Wenn die DLL beim starten nicht vorhanden ist, kommt meist eine 
ordentliche Meldung welche DLL vermisst wird.

Das Arbeiten mit dynamisch Dll ist ein wenig Komplizierter weil du das 
Laden und suchen der Funktionen selber machen musst.

Autor: zwieblum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es gibt keine statische dll. dll = dynamic link library

eine statische library wird beim linken teil der exe, deshalb statisch 
weil nicht austauschbar :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.