Frage

  1. Was ist der Unterschied von einem einfachen C-DLL zu schaffen zwischen der Verwendung von Visual Studio 2005 und Visual C ++. Ich sehe, dass, wenn es unter Studio auch ein Manifest zu schaffen wurde geschaffen, und ich hatte in einer anderen Maschine einige Probleme in Bezug auf Einsatz wegen der Verwendung von Side-by-Side-Ordnern (wenn Sie anrufen, dass dll eine C # Anwendung bilden "
  2. Wie funktioniert der Mechanismus eine DLL Arbeit nennen?

Danke

War es hilfreich?

Lösung

Da nobugz bereits Ihre erste Frage bedeckt, lassen Sie mich auf dem zweiten erweitern. Es ist nicht sehr schwer zu verstehen.

Wenn Sie eine DLL in Windows kompilieren, erstellt der Linker eine Export-Adresstabelle (EAT), dass alle Listen die exportierten Funktionen (die Funktionen der DLL zur Verfügung stellt) und einen Zeiger auf, wo sie in der DLL selbst umgesetzt werden.

Wenn Sie eine Anwendung kompilieren, die Links zu einer DLL, der Linker erzeugt einen Import Address Table (IAT) alle Funktionen auflistet, die in anderen DLL und den Namen des DLL, dass implementiert diese Funktionen implementiert sind. Die Art und Weise weiß, dass eine Funktion in einer DLL existiert, ist aus der LIB-Datei, die Sie Ihr Projekt hinzufügen. Das teilt den Linker mit, dass eine Funktion in einem DLL implementiert ist.

Dann während der Laufzeit, während eine Anwendung Laden des Windows-Ladeprogramm untersucht die IAT, um zu sehen, was DLL Bedarf geladen werden, findet sie, und aktualisiert die Anwendungen IAT (im Speicher) zu Punkt auf die exportierten Funktionen in der DLL geladen.

Das ist die Grundlagen, wie es funktioniert, hoffentlich habe ich bin keine groben Ungenauigkeiten. Und natürlich P / Invoke ist eine weitere Schicht oben auf diesem.

Wenn Sie mehr Informationen darüber, wie DLL Arbeit gibt es immer die MSDN-Dokumentation und wenn Sie genug Detail, das Sie machen wollen Kopf drehen diese Inside Windows Artikel lesen Teil 1 und Teil 2

Andere Tipps

Ja, wenn Sie die DLL-Code mit / MD (Standardeinstellung) kompilieren dann müssen Sie stellen Sie die CRT-Bibliotheken auf dem Zielcomputer . Wenn dies ist nur ein Standalone-DLL ohne weitere Abhängigkeiten dann macht es Sinn, mit der statischen CRT-Option kompilieren, so dass Sie nicht über die Bibliotheken bereitstellen müssen. Rechtsklicken Sie Ihr DLL-Projekt, Eigenschaften, C / C ++, Codegenerierung, Runtime Library = / MTd für die Debug-Konfiguration. Wiederholen Sie für die Release-Konfiguration, jetzt mit / MT.

Google „P / Invoke Marshalling“ erfahren Sie mehr darüber, wie nicht verwalteten Code aus einem verwalteten Programm aufgerufen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top