2012-09-18 20 views
11

he diseñado una la Solicitud C# para Windows que también llama internamente algunas funciones [importado de C++ DLL a través DllImport()]un intento de cargar un programa con un formato excepción incorrecta va a desaparecer con la instalación VS

Mi El código C++ se construye como .DLL en la plataforma Win32 mientras que mi C# se construye como una plataforma "Cualquier CPU".

Cuando ejecuto el .EXE (C#) en mi máquina de prueba, que se enfrentan a un error como

se hizo un intento de cargar un programa con un incorrectos formato excepción de HRESULT 0x8007000B

Sin embargo, este error no se presenta si instalo VSS 2010 en mi máquina y luego ejecuto el EXE.

1) ¿Cuál es la razón de este error? 2) ¿por qué no se observa el error cuando se instala VSS?

He usado Win7 sistema operativo (64 bits) para construir el .EXE (C#) en Cualquier CPU plataforma que a su vez depende de una DLL (C++ DLL importada en C# usando DllImport), construido en Win32

+0

Supongo que es un error de correspondencia de bitness: su .dll es de 32 bits y su .exe es de 64 bits o al revés. VS instala un montón de cosas, aunque no tengo idea de exactamente cómo eso resolvería su problema. – dandan78

+0

¿Alguien puede ayudar? –

+0

Actualice su pregunta para incluir el sistema operativo, .dll bitness y .exe bitness. Además, verifique su configuración de compilación y fuerce la parte .Net para que coincida con la bitidez de su .dll. – dandan78

Respuesta

10

Esto es casi siempre porque está llamando al código de 32 bits de 64 bits dll/exe, etc. o a una dll de 64 bits desde una dll de 32 bits. ¿Qué sucede si construyes el C# para x86? Todavía se ejecutará en 64 bits.

+0

Todavía me pregunto porque la máquina de prueba es de 32 bits y cómo el dll de C++ se genera como uno de 64 bits cuando seleccioné Win32 en la plataforma. cuando uso x86 (en lugar de cualquier CPU), este problema está resuelto. ¿cuál es el problema en detalle aquí? –

+0

Cualquier CPU significa que el framework determinará si se ejecuta como 64 o 32 bit en el inicio de la aplicación. Hubiera esperado que la máquina de prueba tuviera 64 y, por lo tanto, no pudiera llamar a la DLL de 32 bits C++ en tiempo de ejecución. –

+0

Dll está construido como Win32 y EXE está construido como Cualquier plataforma de CPU (en VSS) en una máquina x86bit donde VS está instalado. Ahora, la máquina de prueba tiene una versión x86 del sistema operativo donde se está ejecutando esta aplicación. Desde donde, 64bit está llegando ya que todo es x86. –

Cuestiones relacionadas