functions funciones .net dll assemblies unmanaged managed

.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.



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) .