Почему использование Атрибут DllImport, как соединено к добавлению ссылки?

Я видел несколько примеров, таких как это:

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

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

Но, то, что я не понимаю, - то, почему кто-то сделал бы это, как соединено только к ссылке на DLL как, они делают другие библиотеки? Состояния MSDN: "Атрибут DllImport очень полезен при многократном использовании существующего неуправляемого кода в управляемом приложении. Например, Ваше управляемое приложение, возможно, должно было бы выполнить вызовы к неуправляемому WIN32 API". Но, который говорит, что не полезно сослаться на неуправляемый dll или невозможный иначе?

11
задан m-y 23 July 2010 в 20:06
поделиться

3 ответа

"Но разве это высказывание бесполезно для ссылки на неуправляемую dll или иначе невозможно? »

Да, именно так. То, что вы думаете, как« ссылка на DLL »на самом деле« ссылка на сборку .NET »- так уж получилось, что наиболее распространенный способ упаковки сборок один имеет тенденцию ссылаться на DLL.

DLLImport полностью посвящен импорту «традиционных DLL», то есть тех, которые экспортируют все свои методы с использованием исходного механизма экспорта Windows DLL.

Думайте о DLLImport как о фактически называемом «UnmanagedImport», и все могло бы быть яснее.

26
ответ дан 3 December 2019 в 00:54
поделиться

Некоторые библиотеки, такие как user32.dll, представляют собой неуправляемый код. В основном это означает, что у них нет необходимых метаданных, чтобы позволить .Net разговаривать с ними по ссылке (в него входит гораздо больше, но, надеюсь, это даст вам достаточное преимущество).

14
ответ дан 3 December 2019 в 00:54
поделиться

Код платформы .NET компилируется в управляемый код, который хранится в сборках, эти сборки представляют собой файлы .DLL, НО НЕ ВСЕ файлы .DLL являются сборками, содержащими управляемый код. Вы можете использовать управляемый код только в стиле 'Add Reference'.

Другие языки и методы разработки генерируют .DLL файлы с неуправляемым кодом, на самом деле вы даже можете взаимодействовать (вызывать методы) с ними, но вам нужен атрибут DLLImport

.
2
ответ дан 3 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: