11
votes

Pourquoi utiliser l'attribut Dllimport comme apposé à l'ajout d'une référence?

J'ai vu quelques exemples tels que ceci:

[DllImport("user32.dll")]
static extern bool TranslateMessage([In] ref Message lpMsg);

[DllImport("user32.dll")]
static extern IntPtr DispatchMessage([In] ref Message lpmsg);


0 commentaires

4 Réponses :


16
votes

Certaines bibliothèques telles que user32.dll sont un code non géré. Fondamentalement, cela signifie qu'ils ne disposent pas des métadonnées requises pour permettre à .NET de leur parler par référence (il y a beaucoup plus qui y va, mais j'espère que cela vous donne assez d'une tête de départ.)


0 commentaires

26
votes

"Mais, c'est dire que ce n'est pas utile Pour faire référence à une DLL non gérée ou impossible autrement? "

Oui, exactement. Ce que vous envisagez de «référencer une DLL», ce qui fait référence à un assemblage de .net »- il arrive que le moyen le plus courant d'emballage Le type d'assemblages on a tendance à se référer est dans une DLL.

Dllimport est entièrement à propos de l'importation de «dlls traditionnels» - c'est-à-dire qui exportent toutes leurs méthodes à l'aide du mécanisme d'exportation d'origine Windows DLL.

Pensez à Dllimport comme étant effectivement appelé «non managedimport», et les choses pourraient être plus claires.


0 commentaires

2
votes

Le code de plate-forme .NET compile dans le code géré et il est stocké à l'aide des assemblages, ces assemblages sont des fichiers .dll mais tous les fichiers .dll ne sont pas des assemblages contenant le code géré. Vous pouvez uniquement utiliser le code géré avec le style 'Ajouter une référence'.

D'autres langues et techniques de développement génèrent des fichiers .dll avec un code non géré, vous pouvez même interopérer (méthodes d'appel) avec eux, mais vous avez besoin de l'attribut DLLIMPORT


0 commentaires

15
votes

en un mot:

  • Ajouter une référence est utilisé pour: DLL Fichiers contenant Code géré

  • dllimport est utilisé pour: les fichiers DLL contenant code non géré

    Définitions:

    code géré : code qui sera exécuter uniquement sous la gestion d'une machine virtuelle d'exécution de langue commune (CLR) , typiquement la structure .NET (ou mono ).

    code non géré : tous les binaires compilés compilés fonctionnant directement sur le système d'exploitation ; DLL a compilé à l'aide de tout autre que Visual Studio .NET 2002.

    Plus de détails: géré, non géré, natif: quel type de code est-ce?


3 commentaires

Et j'ai remonté à nouveau, car cela l'expliqua bien. Tellement grossier à la bowevote. Il devrait être banni


@ Fandango68 Je suis d'accord avec vous - c'est une belle explication et j'ai également suscité. Je ne sais pas pourquoi quelqu'un a baissé. Je ne sais pas ce que vous entendez par "cela devrait être interdit", cependant.


@EJOSHUAS L'idée de descente de la descente ne fonctionne donc pas. C'est comme étouffer quelqu'un sur une simple erreur ou un malentendu. C'est pourquoi Facebook n'apportera jamais un "pouce vers le bas".