2010-12-31 33 views
6

Me pregunto si se puede cargar una DLL , del sistema operativo Windows (por ejemplo, user32.dll), en una aplicación (en cualquier lenguaje de programación) con un sistema operativoLinux .DLL de Windows en Linux System

La DLL estaría en un directorio en el sistema de archivos de Linux.

Gracias por la ayuda.

¡Saludos!

+6

Claro que puedes: fopen ("user32.dll", "rb"). La pregunta es: ¿qué quieres hacer con eso? – mmmmmmmm

+0

Quiero usar las funciones que tienen una DLL particular (por ejemplo, user32.dll). – Lobo

+3

Eso no es (directamente) posible. Puede haber maneras de usar WINE. – mmmmmmmm

Respuesta

8

No. Las arquitecturas son fundamentalmente diferentes.

Veo que su pregunta se encuentra etiquetada C++. Si fuera una DLL .NET (construida con bytecode CLR), entonces podría consultarla a través de una aplicación que se ejecuta bajo Mono.

+2

+1 para la referencia Mono – nico

2

DLL es un formato para Windows (es decir, implementación MS del concepto de biblioteca compartida).
No está en un formato que Linux entienda.
Linux usa el formato ELF para bibliotecas dinámicas.

0

¿Por qué quieres hacer esto? Para ejecutar un programa (.exe) que usa esa DLL? En ese caso, necesita un emulador de Windows en su máquina Linux, como wine.

+2

Wine Is Not an Emulator, es una capa de compatibilidad. No funciona si no está en una arquitectura x86 o amd64. – BatchyX

+0

Gracias por la corrección. – Raedwald

4

Probablemente pueda hacer una compilación de Wine personalizada (home page, Wikipedia page) para su aplicación. Estamos hablando de un martillo grande aquí, sin embargo. :-)

7

Es posible si escribe una envoltura para ello. Así es como funciona el win32 codecs en Linux. También Wine usa muchas DLL.

9

Sí, puede cargar una DLL y llamar a sus funciones mediante el uso de una biblioteca contenedora adecuada, pero eso es fundamentalmente inútil si la DLL tiene dependencias en la plataforma que no están presentes. Este enfoque se usa para cosas como códecs de video de código cerrado, donde no existen dependencias (no triviales).

User32.dll es, por supuesto, parte del sistema operativo y está intrínsecamente vinculado a muchas funciones del núcleo NT, ninguna de las cuales existe en Linux. Wine no hace uso de Windows user32.dll, pero proporciona su propia versión que proporciona una funcionalidad equivalente.

Cargando Windows 'user32.dll definitivamente no sería útil, ya que en su mayoría va a ser un contenedor para otras DLL, procesos (por ejemplo, CSRSS) y llamadas al kernel que no están presentes en Linux. Sin embargo, puedes cargar y usar el de Wine.