Qu'est-ce que dans une DLL et comment ça fonctionne?

Je suis toujours référencement Dll dans mon code C#, mais ils sont restés un peu un mystère que je voudrais préciser. C'est une sorte de brain dump de questions concernant les Dll.

Je comprends une DLL est une bibliothèque liée dynamiquement ce qui signifie qu'un autre programme peut accéder à cette bibliothèque au moment de l'exécution pour obtenir la "fonctionnalité". Cependant, considérer les points suivants ASP.NET projet avec Web.dll et Business.dll (Web.dll est l'extrémité avant de la fonctionnalité et les références Business.dll pour les types et les méthodes).

  1. À quel point Web.dll d'un lien dynamique vers Business.dll? Vous remarquerez beaucoup dans Windows HDD raclée pour des petites tâches lors de l'utilisation de Word (etc.) et je crois que ce Mot est hors tension et dynamiquement de liaison dans les fonctionnalités des autres Dll?

    1a. En outre, ce que les charges et les liens DLL - le système d'exploitation ou à certains moment de l'exécution framework comme l' .NET framework?

    1b. Quel est le processus de "création de liens"? Sont les contrôles de compatibilité faite? Le chargement dans la même mémoire? Ce que cette liaison ne signifie réellement?

  2. Ce qui s'est réellement exécute le code de la DLL? Est-il exécuté par le processeur, ou est-il une autre étape de la traduction ou de la compilation avant que le processeur va comprendre le code à l'intérieur de la DLL?

    2a. Dans le cas d'une DLL construit en C# .NET, ce qui est en cours d'exécution: le .NET-cadre ou le système d'exploitation directement?

  3. Un DLL à partir de Linux travailler sur un système Windows (si une telle chose existe), ou sont-ils spécifiques au système d'exploitation?

  4. Sont des Dll spécifiques à un cadre particulier? Peut une DLL construit à l'aide de C# .NET être utilisé par une DLL construit avec, par exemple, Borland C++?

    4a. Si la réponse à la 4 est "non", alors quel est le point d'une DLL? Pourquoi ne pas les différents cadres utilisent leurs propres formats de fichiers liés? Par exemple: un .exe construit en .NET sait qu'un type de fichier de .abc est quelque chose qu'il peut lien dans son code.

  5. De revenir à la Web.dll /Business.dll exemple - pour obtenir une classe de type de client, j'ai besoin de faire référence à Business.dll de Web.dll. Cela doit signifier que Business.dll contient une sorte de spécification de ce qu'est un client de classe est en réalité. Si j'avais compilé mon Business.dll fichier, disons, Delphi: serait-C# le comprendre et être en mesure de créer une classe de clients, ou est-il une sorte d'en-tête info ou quelque chose qui dit "hey désolé vous ne pouvez servir de moi à partir d'un autre Delphi DLL"?

    5a. De même pour les méthodes; puis-je écrire un CreateInvoice() méthode dans une DLL, le compiler en C++, puis de l'accès et de l'exécuter à partir de C#? Ce qui l'arrête ou me permet de faire cela?

  6. Sur le sujet de la DLL hijacking, sûrement le remplacement de la (mauvaise) DLL doit contenir la méthode exacte des signatures et des types comme celui qui s'est détourné. Je suppose que ce ne serait pas difficile à faire si vous pouviez trouver quelles méthodes ont été mises à disposition dans la DLL.

    6a. Ce qui dans mon programme C# est de décider si je peux accéder à une autre DLL? Si mon détourné DLL contenues exactement les mêmes méthodes et les types que l'original, mais il a été compilé dans une autre langue, serait-il travailler?

Ce qui est de la DLL de l'importation et de l'enregistrement de DLL?

  • Cette question est peut-être tout à fait demander pour plus de réponse dans l'histoire.
  • Je pense que cette question mérite une plus grande attention. Je ne vais pas voter pour fermer parce que je pense qu'il a du potentiel.
  • Il doit avoir été 12 Questions distinctes.
  • C'est un super question, mais j'ai vraiment d'accord avec @Chaos et @Matti. Cette question mérite plus d'attention et pourrait/devrait être divisé en un certain nombre de questions différentes.
  • C'était un peu un brain dump quand je l'ai écrit + je voulais centraliser les connaissances dans un domaine 🙂
  • Devrait être une communauté wiki maintenant.

InformationsquelleAutor Remotec | 2010-09-02