2009-06-03 366 views
9

Tengo el dll compilado de 32 bits cuando trato de usarlo en la aplicación de 64 bits que no puede cargar, Así que me gustaría convertir el dll a 64 bits. Funcionó bien cuando la plataforma de la aplicación cambió de "Cualquier CPU" o "x64" a "x86". Pero quiero usarlo en 64 bits, ya que voy a llamar al dll desde páginas ASP.Convertir 32 bit dll a 64 bit dll

Por favor, ayúdenme con esto.

+0

¿Es esta una DLL puede recompilar? – kbyrd

Respuesta

0

Si desea cargar una DLL de C# pura en un proceso de 32 y 64 bits, entonces la elección correcta es AnyCPU. Esto lo compilará como DLL independiente de la CPU y podrá cargarse en cualquier tipo de proceso.

No estoy 100% seguro de que es lo que estás preguntando. Si no es así, ¿puedes aclarar tu pregunta?

10

Windows NO PUEDE cargar un dll de 32 bits en un proceso de 64 bits; esta es una limitación que no puede eludir. Esto significa que si su DLL de 32 bits hace cualquier P/Invocación a otro 32 bits DLLS (o utiliza cualquier .net DLLS de 32 bits), no tendrá suerte (tendrá que ejecutar todo el sitio web en 32 bits).

No está del todo claro cuando funciona y cuando no funciona. Aquí están las explicaciones:

  1. x86 - 32 bits - No se puede cargar en un proceso de 64 bits.
  2. x64 - 64 bits - No se puede ejecutar en una máquina de 32 bits.
  3. AnyCPU - dual: se puede cargar y ejecutar en ambos entornos.

En términos de Cualquier CPU:

  1. proceso de 64 bits en la máquina de 64 bits - DLL se carga como de 64 bits.
  2. Proceso de 32 bits en una máquina de 32 bits - La DLL se carga como 32 bits.
  3. Proceso de 32 bits en una máquina de 64 bits - La DLL se carga como 32 bits.

En la mayoría de los casos está bien dejarlo como AnyCPU. Sin embargo, como dije, si está usando cualquier DLL nativo o .Net de 32 bits, necesitará hacer que toda la aplicación sea de 32 bits (y no hay nada que pueda o Microsoft pueda hacer al respecto).

+0

¡No solo Windows, todos los sistemas operativos! –

+0

Es posible usar una capa de volteo y algún código inteligente. Algunos compiladores son compatibles con thunk y harán todo el trabajo por usted. He hecho esto bajo OS/2 antes. es decir, cargó y usó una DLL de 16 bits de un proceso de 32 bits y también una DLL de 32 bits de un proceso de 16 bits. Pero no es posible ejecutar código de 64 bits de forma nativa en una máquina de 32 bits. – Matt

+0

¡Gracias! Mi aplicación falló en una instalación de Windows x64, parece que la DLL de terceros se compiló como x86. Configurar mi aplicación a x86 lo ha solucionado. – mbmcavoy

2

x86 La marca generalmente se establece por una razón, por lo que puede ser una mala idea cambiarla. Pero si está absolutamente seguro, hay una utilidad, corflags.exe. Lo tengo en C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin. Por supuesto, ayudará con los ensamblados .net solamente.

Cuestiones relacionadas