Warum sollte das DllImport-Attribut zum Hinzufügen einer Referenz verwendet werden?

8

Ich habe ein paar Beispiele wie dieses gesehen:

%Vor%

Aber was ich nicht verstehe, ist, warum jemand das so tun würde, als würde er nur auf die DLL verweisen, so wie sie andere Bibliotheken tun? Der MSDN-Status: "Das DllImport-Attribut ist sehr nützlich, wenn Sie vorhandenen nicht verwalteten Code in einer verwalteten Anwendung wiederverwenden. Beispielsweise muss Ihre verwaltete Anwendung möglicherweise Aufrufe an die nicht verwaltete WIN32-API vornehmen." Aber ist das so, dass es nicht sinnvoll ist, auf eine nicht verwaltete DLL zu verweisen oder unmöglich?

    
m-y 23.07.2010, 20:06
quelle

4 Antworten

22
  

"Aber, ist das sagen, es ist nicht sinnvoll   auf eine nicht verwaltete DLL oder   unmöglich sonst? "

Ja, genau so. Was Sie als "Verweisen auf eine DLL" denken, ist eigentlich "eine .NET-Assembly referenzieren" - es ist einfach so, dass die häufigste Art, die Art von Assemblierungen zu packen, auf die man sich bezieht, eine DLL ist.

DLLImport bezieht sich ausschließlich auf das Importieren von 'traditionellen DLLs' - d. h. die alle ihre Methoden exportieren, indem sie den ursprünglichen Windows DLL-Exportmechanismus verwenden.

Stellen Sie sich DLLImport als "UnmanagedImport" vor, und die Dinge könnten klarer sein.

    
Will Dean 23.07.2010, 20:18
quelle
12

Einige Bibliotheken wie user32.dll sind nicht verwalteter Code. Im Grunde bedeutet das, dass sie nicht über die erforderlichen Metadaten verfügen, um .Net zu erlauben, per Referenz mit ihnen zu kommunizieren (es gibt viel mehr, was dazu führt, aber hoffentlich gibt Ihnen das einen Vorsprung.)

Matthew Whited 23.07.2010 20:10
quelle
8

Auf den Punkt gebracht:

  • Referenz hinzufügen wird für DLL-Dateien verwendet, die verwalteten Code enthalten

  • DllImport wird verwendet für: DLL-Dateien, die nicht verwalteten Code enthalten

Definitionen:

Verwalteter Code : Code, der nur unter der Verwaltung einer Common Language Runtime (CLR) virtuellen Maschine , normalerweise .NET Framework (oder Mono ).

Unmanaged Code : alle kompilierten Binärdateien, die direkt auf dem Betriebssystem ausgeführt werden ; DLLs, die mit etwas älter als Visual Studio .NET 2002 kompiliert wurden.

Weitere Details: Managed, Unmanaged, Native: Welche Art von Code ist das?

    
slayernoah 28.04.2016 16:26
quelle
2

Der .NET-Plattformcode wird in verwalteten Code kompiliert und mithilfe von Assemblys gespeichert. Bei diesen Assemblys handelt es sich um .DLL-Dateien, jedoch nicht ALLE .DLL-Dateien sind Assemblys, die verwalteten Code enthalten. Sie können verwalteten Code nur mit dem Stil 'Verweis hinzufügen' verwenden.

Andere Sprachen und Entwicklungstechniken generieren .DLL-Dateien mit nicht verwaltetem Code, tatsächlich können Sie sogar mit ihnen interagieren (Methoden aufrufen), aber Sie benötigen das DLLImport-Attribut

    
Jairo 23.07.2010 20:51
quelle