2010-07-23 9 views
8

Widziałem kilka przykładów takich jak ten:Dlaczego używać atrybutu DllImport jako stosowanego do dodawania odniesienia?

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

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

Ale, co ja nie rozumiem, dlaczego ktoś miałby to robić jak apposed tylko przedstawieniu DLL jak robią inne biblioteki? MSDN stwierdza: "Atrybut DllImport jest bardzo przydatny podczas ponownego wykorzystywania istniejącego niezarządzanego kodu w zarządzanej aplikacji, na przykład zarządzana aplikacja może wymagać wywoływania niezarządzanego interfejsu API WIN32." Ale czy to jest powiedzenie, że nie jest użyteczne odwoływanie się do niezarządzanej biblioteki DLL lub niemożliwe inaczej?

Odpowiedz

22

„Ale to, że mówiąc to nie jest przydatna odwołać niezarządzanego dll lub niemożliwym jest inaczej?”

Tak, dokładnie tak. To, co masz na myśli jako "odwoływanie się do biblioteki DLL", jest w rzeczywistości "odwoływaniem się do zestawu .NET" - tak się składa, że ​​najczęstszym sposobem pakowania tego rodzaju zespołów, do których się odwołuje, jest DLL.

DLLImport w całości polega na importowaniu "tradycyjnych bibliotek DLL" - tj. Takich, które eksportują wszystkie swoje metody za pomocą oryginalnego mechanizmu eksportu bibliotek DLL systemu Windows.

Pomyśl o DLLImport jako o nazwie "UnmanagedImport", a rzeczy mogą być wyraźniejsze.

2

Kod platformy .NET kompiluje się w Kod zarządzany i jest przechowywany za pomocą Zespołów, to złożeń są pliki .DLL, ALE NIE WSZYSTKIE pliki .DLL są złożeń zawierających Kod zarządzany. Można używać tylko kodu zarządzanego z stylem "Dodaj odwołanie".

Generuje inne języki i techniki programowania.DLL pliki z kodem niezarządzanym, faktycznie może nawet współdziałają (metody połączeń) z nich, ale potrzebne są dllimport przypisują

8

W skrócie:

  • Add Reference służy do: plików DLL zawierających kodu zarządzanego

  • DllImport służy do: plików DLL zawierających kod niezarządzanej

Definicje:

kod zarządzany: kod, który prowadzony tylko pod zarządzanie Common Language Runtime (CLR) maszyna wirtualna, zazwyczaj .NET Framework (lub Mono).

Kod niezarządzany: dowolne skompilowane pliki binarne działające bezpośrednio na OS; DLL skompilowany przy użyciu coś starszego niż Visual Studio .NET 2002.

Więcej szczegółów: opieka Managed, Unmanaged, Native: What Kind of Code Is This?

+1

Downvoter wyjaśnić? – slayernoah

+3

Poproszę cię o anulowanie bezsensownego downwizera – YoungStacker

+0

I znów przegłosowałem, jak to ładnie to wyjaśniłem. Tak nieuprzejmy, aby zgodzić się. Powinien zostać zbanowany – Fandango68

Powiązane problemy