Pourquoi utiliser l'Attribut DllImport comme apposées à l'ajout d'une référence?
J'ai vu un couple d'exemples comme ceci:
[DllImport("user32.dll")]
static extern bool TranslateMessage([In] ref Message lpMsg);
[DllImport("user32.dll")]
static extern IntPtr DispatchMessage([In] ref Message lpmsg);
Mais, ce que je ne comprends pas, c'est pourquoi quelqu'un n'aurait rien gagné à juste référencer la DLL comme ils le font d'autres bibliothèques? La MSDN états: "L'attribut DllImport est très utile lors de réutiliser des code non managé dans une application gérée. Par exemple, votre application gérée pourriez avoir besoin de faire des appels à l'API WIN32 non gérée." Mais, est-ce que le fait de dire qu'il n'est pas utile de faire référence à un non géré dll ou impossible autrement?
OriginalL'auteur m-y | 2010-07-23
Vous devez vous connecter pour publier un commentaire.
Oui, exactement. Ce que vous pensez que "le référencement d'une DLL" est en fait " le référencement d'un .NET assembly " - il se trouve que la façon la plus courante de l'emballage de la nature des assemblages on a tendance à référence se trouve dans une DLL.
DLLImport est tout à fait à propos de l'importation de "traditionnel Dll' - c'est à dire ceux qui exporter tous leurs méthodes à l'aide de la version originale de Windows DLL exportation mécanisme.
Pense DLLImport que fait d'être appelé "UnmanagedImport', et les choses pourraient être plus clair.
OriginalL'auteur Will Dean
Certaines bibliothèques, comme user32.dll sont code non managé. Fondamentalement, cela signifie qu'ils n'ont pas les métadonnées nécessaires pour permettre .Net à leur parler par référence (il y a beaucoup plus qui va dedans, mais j'espère que ça vous donne suffisamment d'avance.)
OriginalL'auteur Matthew Whited
En un mot:
Ajouter la Référence est utilisé pour: les fichiers DLL contenant code managé
DllImport est utilisé pour: les fichiers DLL contenant code non managé
Définitions:
Code managé: code exécuter uniquement sous la direction d'un Common Language Runtime (CLR) de la machine virtuelle, typiquement le .NET Framework (ou Mono).
Code non managé: tout binaires compilés exécutent directement sur le système d'exploitation; Dll compilé en utilisant rien de plus que Visual Studio .NET 2002.
Plus de détails: Géré non géré, Natif: Ce Genre de Code Est-Ce?
Je vais upvote vous pour annuler l'inutile downvoter
Et j'ai upvoted encore une fois,comme cela est expliqué gentiment. Donc rude pour downvote. Ca devrait être interdit
Je suis d'accord avec vous - c'est une belle explication et je upvoted. Je ne sais pas pourquoi quelqu'un downvoted. Pas sûr de ce que tu veux dire par "ca devrait être interdit," même si.
le downvoting idée dans la ne fonctionne tout simplement pas. C'est comme de traînées de quelqu'un sur une simple erreur ou d'un malentendu. C'est pourquoi Facebook ne seront jamais mettre dans une "thumbs down".
OriginalL'auteur slayernoah
L' .NET plate-forme de code se compile en Code Managé et il est stocké à l'aide des Assemblées, ce sont les ensembles .DLL fichiers, MAIS PAS TOUS .Les fichiers DLL sont des assemblages contenant le Code Managé.
Vous ne pouvez utiliser du Code Managé avec "Ajouter une Référence" style.
D'autres langages et techniques de développement génère .Les fichiers DLL avec du code non managé, en fait, vous pouvez même interagir (l'appel de méthodes) avec eux, mais vous avez besoin de l'attribut DLLImport
OriginalL'auteur Jairo