Pregunta

Estoy teniendo un C # (.NET 3.5, VS2005 Profesional) que utiliza la biblioteca de 32 bits no administrado escrito en C / C ++. API que yo uso es la siguiente:

void * Inicializar (int x);

voic GetData (void *);

Y esto funciona cuando lo ejecuto en Windows XP de 32 bits, pero en Windows XP64bit se lanza una excepción:

Excepción no controlada: System.Reflection.TargetInvocationException: Se inició una excepción por el destino de una invocación. ---> System.BadImageFormatException: Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)  en Aktuelizator.CommonLibrary.InitializeRingBuffer (Int32 dim)  en Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor ()

Estos no administrado bajo la obra de DLL de 64 bits de XP de 32 bits cuando se llama desde unmanages writetn aplicación en C / C ++.

¿Alguien tiene alguna idea?

¿Fue útil?

Solución

Su Plataforma configuración de generación se establece en 'Cualquier CPU', que significa en un sistema operativo de 64 bits que se ejecuta como 64 bits y no se puede cargar el archivo DLL. Establecer que en lugar de 86, esto obligará a que se ejecute como de 32 bits, independientemente del sistema operativo y el archivo DLL se carga bien.

Otros consejos

Parece que su única DLL se compila a 32 bits, pero se intenta llamar a que, tanto desde el 32 bits y 64 bits proceso. El primero va a funcionar, por supuesto. La tarde, sin embargo, no lo hará. 32 DLL bits sólo se pueden utilizar en los procesos de 32 bits. Tratar de compilar el archivo DLL a un objetivo de 64 bits y dejar que la aplicación # C, que uno.

Comprobar todos los parámetros que se definen como Int32, que debería ser, de hecho IntPtr.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top