Эта DLL управляемая или неуправляемая? - PullRequest
16 голосов
/ 11 марта 2011

Я держу перед вами DLL.Используя только Win32 SDK, вы можете сказать мне, является ли эта DLL сборкой .NET?

Почему?Наше приложение загружает плагины в форме DLL.Мы пытаемся расширить определение этих плагинов, чтобы разрешить сборки .NET, но интерфейс будет другим, и поэтому загрузчик должен знать, является ли DLL управляемой или неуправляемой, прежде чем загружать ее.

Ответы [ 3 ]

18 голосов
/ 18 апреля 2014

Чтобы определить, является ли DLL (или EXE) управляемой или неуправляемой, используйте dumpbin.exe с переключателем /dependents . Если вы видите mscoree.dll в выводе , то сборка является управляемой сборкой.

Например, для управляемой DLL, которую я создал в Visual Studio 2010, я получаю следующий вывод:

Dump of file <MANAGED_DLL>.dll

File Type: DLL

  Image has the following dependencies:

    mscoree.dll

  Summary

        2000 .reloc
        2000 .rsrc
        2000 .sdata
       12000 .text

dumpbin.exe поставляется как часть Visual Studio Tools . Чтобы запустить его, удобно использовать командную строку Visual Studio . Например, на моем компьютере с Windows 7 под управлением Visual Studio 2010 я нахожу командную строку Visual Studio в меню Пуск Windows по адресу:

Microsoft Visual Studio 2010 => Инструменты Visual Studio => Командная строка Visual Studio (2010) )

Затем в командной строке Visual Studio просто введите:

dumpbin /dependents DLL_OF_INTEREST.DLL

или

dumpbin /dependents EXE_OF_INTEREST.EXE

В качестве альтернативы вы можете использовать утилиту corflags.exe, которая также включена в Visual Studio Tools. Запуск из командной строки Visual Studio на неуправляемой сборке :

corflags UNMANAGED.DLL

.. вы получите:

corflags : error CF008 : The specified file does not have a valid managed header

... тогда как на управляемой сборке вы получите что-то вроде:

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 1
ILONLY    : 1
32BIT     : 0
Signed    : 0

Связанный:

6 голосов
/ 11 марта 2011

Я бы просто попытался загрузить его как сборку .NET, и в случае сбоя вернемся к «неуправляемому» интерфейсу.

5 голосов
/ 11 марта 2011

Вы можете проверить информацию PE-заголовка для информации о том, какой тип информации содержится в DLL. В этой статье подробно описывается, как этого добиться .

...