2010-08-25 23 views
14

Tengo un proyecto C# 2.0 que está configurado para apuntar a 'Cualquier CPU', sin embargo, está haciendo referencia a un proyecto de C++ que está construyendo un dll de 32 bits.¿Cómo hago referencia a una DLL de 32 bits en un proyecto de 64 bits?

Cuando trato de ejecutar mi programa en una máquina de 64 bits me sale el siguiente error:

System.BadImageFormatException was unhandled Message: Could not load file or assembly TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null or one of its dependencies. An attempt was made to load a program with an incorrect format.

¿Cómo puedo solucionar este problema?

actualización

Quiero ser capaz de mantener el proyecto principal como cualquier CPU.

Gracias.

+0

Tenga en cuenta lo que significa "Cualquier CPU". ** Usted ** afirma que el proyecto principal se ejecuta en todas partes, lo que significa que ** usted ** es responsable de eliminar todas las dependencias de arquitectura. – MSalters

Respuesta

13

Deberá construir su proyecto .NET como 32 bits (destino x86) si desea cargar correctamente una DLL de 32 bits en una máquina de 64 bits.

RE: Actualización:

Si desea mantener su proyecto como "Cualquier CPU", se necesita un 32 bits y 64 bits de una versión de la DLL, y asegúrese de que la versión apropiada se distribuye con tu aplicación Si no puede construir el otro proyecto como 64 bits, debe construir su proyecto .NET solo como de 32 bits.

4

Deberá forzar su proyecto EXE para que se ejecute en modo de 32 bits para que pueda usar esa DLL de C++. Project + Properties, pestaña Build, Platform Target = x86.

1

Es posible que desee echar un vistazo a este article que explica por qué no es posible, en resumen, ya que se trata de punteros al acceder al código no administrado.

1

Para mantener su proyecto principal como Any Cpu, debe suministrar la versión de 32 y 64 bits del archivo .dll, lo que debería ser posible, ya que está compilando desde la fuente.

Luego debe proporcionar el archivo ejecutable con un manifiesto que lo apunte hacia la derecha dependiendo de la plataforma.

Cuestiones relacionadas