27 votes

Quelles sont les différences «exactes» entre une DLL .NET et une DLL normale?

Je veux savoir Quels sont les exact des différences entre les deux .NET dll et un normal dll.

Première question, ce qui est "normal DLL" appelé? J'utilise le mot "normal". Mais il ne semble pas l'droit?

Parce que les deux suivent le format PE. Ouais, je suis d'accord que .NET DLL a une section supplémentaire. Autre que celui de toute autre chose est le même.

Je sais aussi que dans .NET code est converti en CIL/MSIL alors qu'est-ce que rempli en .texte de la section de fichier PE? MSIL? car il n'y a pas de code binaire. Mais si ils ont mis MSIL dans .section de texte. Chargeur suppose que c'est un code binaire et permet de l'exécuter. Ce qui n'est pas le cas. Ce qui me manque?

Je suis surpris de savoir que

Même la DLL d'extension de fichier est artificielle. Vous pouvez avoir les Dll avec entièrement différentes extensions-pour exemple .Contrôles OCX et de Contrôle Panneau applets (.Le CPL fichiers) sont des Dll.

Quoi d'autre extensions sont utilisées pour les fichiers DLL?

Mais je peux comprendre la raison de l'utilisation de différentes extensions. Pourquoi n'ont-ils pas suivre faire la même chose dans le cas d' .NET DLL? ils pourraient bien servir une nouvelle extension pour la différencier de la "normale" de la DLL. Ils ont même un nom différent (ASSEMBLY) pour les dll dans .NET, mais ne pouvait pas changer l'extension. hein?

Une autre question: qu'est-Ce que l'enregistrement de DLL? ils utilisent regsvr32.exe pour cela. droit? Je l'ai remarqué quand j'ai installé Windows XP SP3. Après l'installation et avant le redémarrage de windows, j'ai vérifié liste de démarrage et trouvé beaucoup d' regsvr32.exe des entrées avec beaucoup de Dll.

N'hésitez pas à plonger dans autant de profondeur que vous le souhaitez. J'apprends sur les linkers,des chargeurs,des formats binaires. Je suis familier avec le PE, le format de fichier également.

11voto

Chris S Points 32376

J'ai copié et collé ce à partir de mon propre post sur ça:

Le format d'une .NET dll est:

  • En-tête PE
  • CLR-tête
  • Métadonnées du CLR
  • CLR code IL
  • Natif de données

En-tête PE

L'en-tête PE est le fichier exécutable portable-tête que toutes les applications Win32 et les bibliothèques ont, et indique à Windows de quoi faire avec le fichier. Avec .NET assemblées charge la CLR qui charge à son tour de l'assemblée.

CLR-tête

Il contient des informations telles que l' .NET version la .exe ou l'assemblage a été écrit avec, un nom fort hachage de la signature, l'adresse (RVA ou d'un parent d'adressage virtuel) dans le fichier que les ressources peuvent être trouvées. Et surtout le point d'entrée pour l'application qui est un gage de pointage à la MethodDef les métadonnées de la table, ou par un autre fichier. Ce jeton est de 0 pour les bibliothèques de classes.

Métadonnées du CLR

Ce sont des informations sur le module qui est stocké à l'intérieur de différents types de "flux". Ces cours d'eau sont généralement compressés, à l'exception de #~ qui peut être décompressé pour modifier et continuer. Le flux se présente sous deux formes, un tas qui est seulement utilisé pour le stockage, et les tables.

Les différentes parties de votre fichier DLL/assemblée sont stockées dans différentes tables en fonction de ce qu'ils font - par exemple, tous les types sont stockées dans l' TypeRef tableau, toutes les méthodes dans l' Method table. Chacune des tables de références, une table parente.

Le point de départ de la tables est le Module de tableau qui ne contient que le nom et le guid du module, à une seule ligne. Après c'est le ModuleRef table qui contient des informations sur tous les modules qui sont référencés par ce module (à partir de la même assemblée). Dans le cas de VS.NET et son utilisation de la csc.exe il n'y a pas plusieurs fichiers dans l'assemblée, qu'un seul module.

Après c'est la définition de type tableau qui contient 6 colonnes contenant le type du nom, de l'espace de noms, de son parent (0 pour les interfaces et l'Objet), la ligne de départ pour ses champs dans la FieldDef tableau, ligne de départ pour ses méthodes dans le MethodDef table.

IL et natif de données

L'application elle-même.

Le livre à l'Intérieur de Microsoft .NET IL Assembleur - Serge Lidin va dans beaucoup plus de détails si vous êtes intéressé.

2voto

t0mm13b Points 21031

C'est une bonne question. Il y a une différence cruciale entre les deux .NET DLL et ordinaire de DLL, pour le bien de cette réponse, nous allons utiliser la terminologie indigène DLL normale DLL qui ne dépendent pas de la .NET framework.

La différence essentielle est qu'il y a un 15e répertoire de données d'entrée au sein de la .NET-tête PE de mise en page, DLL native de seulement 14 de données des entrées du répertoire. C'est comment vous pouvez dire la différence entre les deux, pour la DLL native, que l'entrée sera de zéro! Et de ne pas être seul que .NET DLL serait avoir des métadonnées intégrée pour le Cadre de la traiter en conséquence comme les attributs de demander les autorisations de sécurité, etc, la même chose s'applique pour .NET EXE.

En ce qui concerne les différentes extensions se font passer comme DLL comme OCX, CPL, les Économiseurs d'Écran sont un autre exemple de non-DLL d'extension dans le sens de la parole à partir d'un .EXE point de vue, c'est à dire. ceux qui le sont .La SCR sont vraiment .EXE est...bizarre que cela puisse paraître, il semble que Microsoft fait quelques applications pour l'utilisation d'une extension spécifique pour un fichier EXE et DLL, je pense que c'était le maintien de l'époque de Windows 3.1, le CPL pour le Panneau de Contrôle, OLE connu comme Object Linking and Embedding à OCX maintenant ActiveX, SCR pour les Économiseurs d'Écran aka .EXE. Il ne me surprendrait pas si la même chose s'applique .MSCc (extensions de service utilisé dans le composant logiciel Enfichable Microsoft Dans les Consoles)

DLL Inscriptions est où regsvr32 registres de la DLL et l'identification de la classe qui se trouve dans le registre sous la clé HKEY_CLASSES_ROOT, ce serait plus susceptible d'être pour COM (Component Object Model) pour faire de la COM globale des objets visibles à toutes les langues, indépendamment du langage de développement et environnements. ActiveX DLL serait également dans cette même catégorie, certains sont connus pour enregistrer automatiquement eux-mêmes (y compris COM DLL), y compris leur bibliothèque de type d'identification (id de la typelib s)...

Beaucoup de logiciels avant Windows 95, l'habitude d'avoir leurs propres DLL qui traînent, certains dupliqué, la commune je me souvienne était CTL3D.DLL (vous vous Souvenez? Que donnerait les Contrôles Windows 3D - gawd!). Il y a donc plusieurs versions dupliquées partout, cette duplication et les différences de version qui aboutit à Windows 95, connu comme l'enfer des DLL. Il était là, que le registre n'débuts quand il a été lancé, qui a été conçu pour contourner l'enfer des DLL par l'obtention de toutes les les bibliothèques de types enregistré dans un seul endroit au lieu de dupliquer la DLL en a partout, mais elle ne résout pas les versions à l'époque, conduisant à des programmes figurant cassé et il y a un id de classe en cours d'utilisation par une DLL, qui a été remplacé par une nouvelle version de la DLL qui a causé les programmes de rompre!

0voto

zebrabox Points 3937

Seule chose à ajouter pour les autres réponses postées est qu'un c/c++ '.dll fichier est juste une convention de nommage - vous pouvez l'appeler ce que vous voulez de là .ocx et .le cpl.
Une dll c/c++ est un ensemble de code et de données qui est chargé lors de l'exécution à l'aide de la fonction LoadLibrary et cartographiés dans le destinataire de l'appel de l'espace d'adressage. Il est toujours compilé en code natif, mais n'ont pas de concept de l'adresse cible de l'espace, car il est conçu pour être corrigé et corrigé par le chargeur.

0voto

Matt Points 11

Normal DLL

Un .dll fichier contient le code compilé, vous pouvez utiliser dans votre application afin d'effectuer certaines fonctions du programme et peut être exigé par une autre application ou d'un module (tels que .exe ou .dll) pour le charger via un point d'entrée

.Net DLL

Lorsque vous implémentez une .Net DLL (Assemblée) dans .NET Langages tels que C# ou VB.NET vous produisez une gestion de l'Assemblée. Géré Assemblée est le composant standard spécifiées par la .NET. Par conséquent, les .Net assemblées ne sont compréhensibles qu'à Microsoft.NET et peut uniquement être utilisé dans .NET applications gérées.

plus d'info .... Différence entre la DLL et .Net Dll?

Matt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X