Was sind die "genauen" Unterschiede zwischen .NET-dll und eine normale dll?
Ich will wissen, was sind die genaue Unterschiede zwischen .NET-dll und eine normale dll.
Erste Frage, was ist "normale DLL" genannt? Ich bin mit dem Wort 'normal'. Aber es scheint nicht Recht?
Weil beide Folgen dem PE-format. Ja, ich bin einverstanden, dass .NET-DLL hat einen extra Abschnitt. Andere als die, alles andere ist gleich.
Ich weiß auch, dass in .NET-code wird umgewandelt in CIL/MSIL-was dann eingefüllt wird .text-Abschnitt der PE-Datei? MSIL? da gibt es keinen binären code. Aber wenn Sie setzen MSIL-in .text-Abschnitt. Loader setzt Voraus, dass es ein binary code und lässt es ausführen. Das ist nicht der Fall. Was bin ich?
Bin ich überrascht, zu wissen, dass
Sogar die DLL-Datei-Erweiterung ist
künstlicher. Sie können DLLs mit
ganz anders Erweiterungen—
Instanz .OCX-Steuerelemente und-Kontrolle
Panel-applets (.CPL-Dateien) werden DLLs.
Was anderes Erweiterungen verwendet werden für die DLL-Dateien?
Aber ich kann Sie verstehen, der Grund für die Verwendung verschiedener Erweiterungen. Warum nicht Sie Folgen, machen Sie die gleiche Sache bei .NET DLLS? Sie hätte eine neue Erweiterung, um es zu unterscheiden von den "normalen" DLL. Sie haben sogar einen anderen Namen (ASSEMBLY
) für dlls in .NETTO konnte sich aber nicht ändern Sie die Erweiterung. huh?
Völlig anderen Frage: Was ist eine DLL-Registrierung? Sie verwenden regsvr32.exe für Sie. richtig? Ich bemerkte es, wenn ich Windows XP SP3 installiert wurde. Nach der Montage & vor dem Neustart von windows habe ich überprüft, der startup-Liste und fand viel regsvr32.exe
Einträge mit viel DLLs.
Bitte fühlen Sie sich frei, Tauchen Sie ein in wie viel Tiefe, wie Sie möchten. Ich Lerne über Linker,Lader,Binär-Formate. Ich bin vertraut mit PE-Datei format.
- Wenn Sie brauchen, um zu wissen, die genauen Unterschiede, würde man vielleicht am besten gedient durch direkten Vergleich der entsprechenden Datei-format-Spezifikationen.
- das Dateiformat ist das gleiche. Seine PE mit einem neuen Abschnitt. Ich bin verwirrt mit binären und MSIL-code. wo gehen Sie hin? was wird sein in .text-Abschnitt. Was geht, wo, etc..
- dass link gar nicht aus der Ferne beantworten Sie die Frage hier. Auf top von, dass, jemanden sofort zu Google ist dabei verpönt.
- +1 von mir - gute Frage und interessant! 🙂
- Sie registrieren nicht ein .NET dll/exe-Datei mit "regsvr32", - die CLR ist ein COM-server selbst :o)
- "Du brauchst dich nicht registrieren .NET dll/exe-Datei mit "regsvr32", - die CLR ist ein COM-server selbst". Was bedeutet das?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich kopiert und eingefügt, das aus meinen eigenen Beitrag drauf:
Format .NET dll:
PE-header
Den PE-header-Dateien (portable executable header, der alle Win32-Anwendungen und-Bibliotheken haben, und weist Windows was mit der Datei machen. Mit .NET-Assemblys dieser lädt die CLR die wiederum lädt die assembly.
CLR-header
Diese enthält Informationen wie die .NET version die .exe-Datei oder assembly geschrieben wurde, mit starken Namen Signatur-hash, der Adresse (RVA oder relative virtuelle Adresse) in der Datei, die die Ressourcen gefunden werden können. Und am wichtigsten ist der Einstiegspunkt für die Anwendung, das ist ein Zeichen, deutete auf die MethodDef-Metadaten-Tabelle oder eine andere Datei. Dieses token ist 0 für Klassenbibliotheken.
CLR-Metadaten
Dies ist eine information über das Modul, das gespeichert ist im inneren verschiedene Arten von "streams". Diese Ströme sind in der Regel komprimiert, mit Ausnahme von #~, die können komprimiert für Bearbeiten und fortfahren. Die streams kommen in zwei Formen, ein heap ist nur für die Speicherung verwendet werden, und Tabellen.
Den verschiedenen teilen der DLL/assembly sind in verschiedenen Tabellen gespeichert sind, basierend auf, was Sie tun - zum Beispiel alle Arten gespeichert sind, in die
TypeRef
Tabelle werden alle Methoden in derMethod
Tabelle. Jede der Tabellen-Referenzen in einer übergeordneten Tabelle.Den start-Punkt der Tabellen ist das Modul der Tabelle, die enthält nur den Namen und die guid des Moduls als eine einzige Zeile. Nach dieser ist die ModuleRef Tabelle enthält Informationen über alle Module, auf die verwiesen wird, die von dieser module (von der gleichen assembly). Im Fall von VS.NET und seine Verwendung csc.exe es gibt nicht mehrere Dateien in der Baugruppe nur ein Modul.
Nach diesem ist der TypeDef-Tabelle enthält 6 Spalten mit dem Typ name, namespace, Ihre Muttergesellschaft (0 für Schnittstellen und Objekt), die start-Zeile für Ihre Felder in der FieldDef Tabelle beginnen Zeile für die zugehörigen Methoden in die MethodDef-Tabelle.
IL und native Daten
Die app selbst.
Den Buch in Microsoft .NET IL Assembler - Serge Lidin geht in viel mehr Details, wenn Sie interessiert sind.
Dies ist eine gute Frage. Es ist ein entscheidender Unterschied zwischen .NET-DLLs und normale DLLs, die für die Zwecke dieser Antwort, wir verwenden die Terminologie native DLL 's als normale DLL' s, die sind nicht davon abhängig .NET framework.
Der entscheidende Unterschied ist, dass es eine 15-Daten-Verzeichnis Eintrag innerhalb der .NET PE-header-layout, native DLL ' s haben nur 14 Daten-Verzeichnis-Einträge. Das ist, wie können Sie sagen, der Unterschied zwischen den beiden, für die native DLL, dieser Eintrag wird gleich null sein! Und nicht allein, dass .NET DLL hätte Metadaten, die in es, den Rechtsrahmen zu behandeln Sie entsprechend wie Attribute anfordern, security, Berechtigungen etc, das gleiche gilt für .NET EXE.
In Bezug auf die verschiedenen Erweiterungen, die sich als DLL (wie OCX und CPL, Bildschirmschoner sind ein weiteres Beispiel für eine nicht-DLL-Erweiterung im Sinne des Wortes aus .EXE-Perspektive, dh. diejenigen, die es sind .SCR sind wirklich .EXE ist...Bizarr wie es klingt, scheint es, dass Microsoft einige Anwendungen verwenden eine spezielle Erweiterung für eine EXE und DLL, ich denke, das war die hold-over aus den Tagen von Windows 3.1, CPL für Control Panel, OLE, bekannt als Object Linking and Embedding auf OCX-jetzt ActiveX, SCR für Bildschirmschoner aka .EXE. Es würde mich nicht überraschen, wenn der gleiche gilt für .MSCc (service-Erweiterungen in Microsoft-Snap-In Konsolen)
DLL-Registrierungen ist, wo
regsvr32
registriert die DLL und die Klassen-id ' s, die gefunden werden könnten, die in der registry unter dem Schlüssel HKEY_CLASSES_ROOT, dies würde eher für die COM (Component Object Model) für die COM-Objekte sind Global sichtbar für alle Sprachen, unabhängig von der Entwicklung der Sprache/Umgebungen. ActiveX-DLL 's müssten auch passen in die selbe Kategorie, einige sind bekannt, um automatisch selbst registrieren (einschließlich COM-DLL' s), einschließlich Ihrer Art library identification (id der Typbibliothek ist)...Eine Menge software, bevor Windows 95 verwendet werden, um Ihre eigenen DLL ' s herumliegen, einige doppelt, die gemeinsame eins kann ich mich erinnern CTL3D.DLL (Erinnern Sie sich? Das würde geben, Windows-Steuerelemente, eine 3D-look - gawd!). Es gab so viele Versionen dupliziert überall, diese überschneidungen und Unterschiede version war zu führen auf die in Windows 95, bekannt als die DLL-Hölle. Es war dort, dass die registry-Debüt Aussehen, wenn es gestartet wurde, wurde konzipiert, um die DLL-Hölle, indem man alle Typbibliotheken registriert in einem Punkt, statt Sie zu duplizieren die DLL ' s alle über dem Platz, aber es nicht beheben, die Versionen an der Zeit, was für Programme erscheinen gebrochen, als es war eine class-id in die Nutzung durch eine DLL, die wurde ersetzt durch eine neuere DLL-version, welches verursacht, die Programme zu brechen!
"C:\WINDOWS\system32\mmc.exe" "C:\WINDOWS\system32\diskmgmt.msc"
HKCR\.msc
undHKCR\mscfile
Registry-Schlüssel geöffnet werden, mit mmc.exe.Normalen DLL
Ein .dll-Datei enthält kompilierten code, den Sie in Ihrer Anwendung verwenden können, um bestimmte Funktionen des Programms und kann es erforderlich sein, eine andere Anwendung oder ein Modul (wie zB .exe-oder .dll) zu laden, es durch einen Einstiegspunkt
.Net DLL
Wenn Sie Umsetzung ein .Net-DLL (Assembly) in .NET Sprachen wie C# oder VB.NET erzeugen Sie eine Verwaltete Assembly. Verwaltete Assembly der Komponenten-standard angegeben .NET. Daher .Net-assemblies sind verständlich, nur zu Microsoft.NET und kann nur benutzt werden in .NET-verwaltete Anwendungen.
mehr info .... Unterschied zwischen Normal-DLL-und .Net-Dll?
Matt
Nur Sache für das hinzufügen zu den anderen Antworten geschrieben wird, dass eine c/c++ '.dll " - Datei ist einfach eine Namenskonvention - man könnte es nennen, was Sie wie damit .ocx-und .kpl.
Ein c/c++ - dll ist eine Reihe von code und Daten, die geladen wird, zur Laufzeit mit LoadLibrary und abgebildet in die aufgerufene Adresse Raum. Es ist noch in systemeigenen code kompiliert, aber nicht jedes Konzept von den target-address-space, weil es entworfen gepatcht werden und fixiert durch den loader.