LoadLibrary 193

Estoy creando un dll C ++ / CLI que se cargará en una aplicación heredada de c ++. La aplicación heredada hace esto con una llamada tradicional a LoadLibrary. Tanto la aplicación como el dll C ++ / CLI se compilan en modo de 64 bits.

Cuando se produce la llamada a LoadLibrary, falla con el error 193. Esto generalmente significa que algún componente que no sea de 64 bits está intentando cargarse. Cuando miro la salida de carga de dll en Visual Studio 2010, veo que la falla ocurre cuando se está cargando mscoree.dll (para ser exactos, veo mi dll cargado, luego mscoree cargado, luego mscoree descargado, luego mi dll descargado , entonces el error regresó). Específicamente se está cargando C: \ Windows \ System32 \ mscoree.dll, cuando examino este mscoree.dll, encuentro que está dirigido a I386.

¿Cómo puedo asegurarme de que mi aplicación se vinculará con el mscoree.dll correcto? Entiendo que esto se puede hacer con un manifiesto, pero no puedo encontrar ninguna buena información sobre cómo configurar uno. La solución ideal permitiría la compilación en modo de 32 bits o 64 bits y apuntaría al mscoree.dll correcto.

Como nota al margen, encontré un mscoree.dll en una carpeta de lado a lado que verifiqué que es el modo de 64 bits y lo copié en mi directorio de aplicaciones con la esperanza de que primero lo recogiera. Esto no funcionó y la versión C: \ Windows \ System32 todavía estaba cargada.

Gracias

Max

Salida de CorFlags.exe en el C ++ / CLI dll
Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32+
CorFlags  : 16
ILONLY    : 0
32BIT     : 0
Signed    : 0
Salida de pedump.exe en C: \ System32 \ mscoree.dll
PS C:\Windows\System32> pedump.exe .\mscoree.dll
Dump of file .\MSCOREE.DLL

File Header
  Machine:                      014C (I386)
  Number of Sections:           0004
  TimeDateStamp:                4B90752B -> Thu Mar 04 22:06:19 2010
  PointerToSymbolTable:         00000000
  NumberOfSymbols:              00000000
  SizeOfOptionalHeader:         00E0
  Characteristics:              2102
    EXECUTABLE_IMAGE
    32BIT_MACHINE
    DLL
...

(el pedump continúa desde aquí para describir las importaciones y exportaciones, pero eso no es importante aquí)

Información de carga ampliada

Esta es la salida completa de la carga fallida.

Nota: El dll C ++ / CLI se llama DsfClr.dll
la salida se obtuvo ejecutando gflags.exe -i [exename] + sls y examinando los resultados en un depurador

http: //pastebin.com/FyumUiM

ACTUALIZAR

Utilizando un consejo publicado en un comentario de Reuben a continuación, pude determinar que mscoree.dll realmente está apuntando a AMD64, pero pedump está proporcionando información no válida porque se está ejecutando en WOW64. Dicho esto, todavía no puedo cargar esta biblioteca, si alguien tiene alguna sugerencia sería muy apreciada.
Una cosa más que he probado: hice una nueva aplicación C # y hice referencia a la dll C ++ / CLI, luego, en la función main (), creé una instancia en la dll C ++ / CLI. Esto provocó una excepción de infracción de acceso antes de llamar a la función main (). Cuando elimino la instanciación, la función principal funciona bien. Supongo que la creación de instancias está causando una carga de retraso de mi ensamblado C ++ / CLI, lo que causa el mismo error de carga que estaba viendo desde el ensamblaje nativ