código no administrado DLL
-
09-09-2019 - |
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?
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.