2010-12-31 15 views
6

Zastanawiam się, czy można załadować DLL, z systemem operacyjnym Windows (na przykład USER32.DLL), w aplikacji (w dowolnym języku programowania) z systemem operacyjnym Linux .DLL systemu Windows na Linux System

Biblioteka DLL znajduje się w katalogu systemu plików Linux.

Dzięki za pomoc.

Pozdrowienia!

+6

Oczywiście można: fopen ("user32.dll", "rb"). Pytanie brzmi: co chcesz z tym zrobić? – mmmmmmmm

+0

Chcę użyć funkcji, które mają określoną bibliotekę DLL (na przykład user32.dll). – Lobo

+3

To nie jest możliwe (bezpośrednio). Mogą być sposoby używania WINE. – mmmmmmmm

Odpowiedz

8

Nie. Architektury są zasadniczo różne.

Zauważyłem, że twoje pytanie jest oznaczone jako C++. Jeśli była to biblioteka DLL .net (zbudowana przy użyciu kodu bajtowego CLR), wówczas może odwołać się do niej przez aplikację działającą pod Mono.

+2

+1 dla odniesienia Mono – nico

2

DLL to format dla systemu Windows (to znaczy implementacja MS koncepcji wspólnej biblioteki).
Nie jest to format zrozumiały dla systemu Linux.
Linux używa formatu ELF do bibliotek dynamicznych.

0

Dlaczego chcesz to zrobić? Aby uruchomić program (.exe), który korzysta z tej biblioteki DLL? W takim przypadku potrzebny jest emulator systemu Windows na komputerze z systemem Linux, na przykład wine.

+2

Wino nie jest emulatorem, jest to warstwa kompatybilności. To nie działa, jeśli nie jesteś w architekturze x86 lub amd64. – BatchyX

+0

Dzięki za poprawkę. – Raedwald

4

Prawdopodobnie można wykonać niestandardową kompozycję Wine (home page, Wikipedia page) dla swojej aplikacji. Mówimy tu o młocie duży. :-)

7

Jest to możliwe, jeśli napiszesz do tego opakowanie. Tak działa win32 codecs w systemie Linux. Również Wine używa wielu bibliotek DLL.

9

Tak, można załadować bibliotekę DLL i wywołać jej funkcje przy użyciu odpowiedniej biblioteki opakowania, ale jest to zasadniczo bezużyteczne, jeśli sama biblioteka DLL ma zależności na platformie, które nie są obecne. To podejście jest stosowane w przypadku takich kodeków wideo, które nie zawierają (nietrywialnych) zależności.

User32.dll jest oczywiście częścią systemu operacyjnego i nierozerwalnie związane z wieloma funkcjami jądra NT, z których żaden nie istnieje w Linuksie. Wine nie korzysta z Windows user32.dll, ale zapewnia własną wersję, która zapewnia równoważną funkcjonalność.

Ładowanie Windowsa "user32.dll" z pewnością nie byłoby użyteczne, ponieważ w większości będzie to wrapper dla innych bibliotek DLL, procesów (na przykład CSRSS) i wywołań jądra, których nie ma pod Linuksem. Możesz jednak załadować i używać Wine'a.

Powiązane problemy