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 dllMicrosoft (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.dllPS 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 ampliadaEsta 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
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