.net - funciones - ¿Este DLL está gestionado o no gestionado?
user32 dll funciones (3)
Tengo ante ti una DLL. Usando solo el SDK de Win32, ¿puede decirme si esta DLL es un ensamblado .NET?
¿Por qué? Nuestra aplicación carga complementos en forma de DLL. Estamos tratando de ampliar la definición de estos complementos para permitir los ensamblados .NET, pero la interfaz será diferente y, por lo tanto, el cargador necesitará saber si la DLL está administrada o no administrada antes de cargarla.
Puede consultar la información del encabezado de PE para obtener información sobre qué tipo de información está contenida en la DLL. Este artículo describe cómo lograr esto en detalle .
Simplemente intentaría cargarlo como un ensamblado .NET, y si falla, recurra a la interfaz "no administrada".
Para determinar si una DLL (o EXE) está administrada o no administrada, use dumpbin.exe
con el interruptor /dependents
. Si ve mscoree.dll
en la salida , entonces el ensamblaje es un ensamblado administrado.
Por ejemplo, para una DLL administrada que creé en Visual Studio 2010, obtengo el siguiente resultado:
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
se entrega como parte de las herramientas de Visual Studio . Para ejecutarlo, una forma conveniente de hacerlo es a través del símbolo del sistema de Visual Studio . Por ejemplo, desde mi máquina con Windows 7 que ejecuta Visual Studio 2010, encuentro el Símbolo del sistema de Visual Studio en el Menú de Inicio de Windows en:
Microsoft Visual Studio 2010 => Visual Studio Tools => Símbolo del sistema de Visual Studio (2010)
Luego, dentro de la línea de comandos de Visual Studio, simplemente ingrese:
dumpbin /dependents DLL_OF_INTEREST.DLL
o
dumpbin /dependents EXE_OF_INTEREST.EXE
Como alternativa, puede usar la utilidad corflags.exe
que también se incluye con Visual Studio Tools. Ejecutándolo desde el Símbolo del sistema de Visual Studio en un ensamblado no administrado :
corflags UNMANAGED.DLL
..obtendrás:
corflags : error CF008 : The specified file does not have a valid managed header
... mientras que en un ensamblaje administrado , obtendrás algo como:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
Relacionado:
- ¿Cómo determinar si un ensamblado .NET fue construido para x86 o x64? y
- ¿Cómo puedo detectar el tipo de dll? (COM, .NET, WIN32) .