Подтвердить что ты не робот

Является ли эта DLL управляемой или неуправляемой?

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

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

4b9b3361

Ответ 2

Чтобы определить, управляется или неуправляем 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. Чтобы запустить его, удобный способ сделать это через Командная строка 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

Связанный:

Ответ 3

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