2012-11-19 10 views
5

Próbuję użyć dll innej firmy dla programu, który piszę w języku Java. Niestety ma tylko obsługę 32-bitową. Gdy próbuję załadować dll w 64-bitowym VM, pojawia się następujący błąd:Uruchamianie 32-bitowego pliku dll na maszynie 64-bitowej w java

Can't load IA 32-bit .dll on a AMD 64-bit platform 

Próbowałem działa w 32-bitowej wirtualnej maszyny, która działa w Eclipse, ale kiedy wyeksportować projekt, Otrzymuję ten sam błąd. Proszę pomóż!

poważaniem Ben

+0

Czy jesteś pewien, że używasz właściwego Java poza Eclipse? Wypróbuj java -version, aby sprawdzić, czy jest używana właściwa (32-bitowa). – Burkhard

Odpowiedz

9

Nie można korzystać z 32-bitowej DLL w 64-bitowym Hotspot JVM. To nie zadziała. I nie znam żadnej innej 64-bitowej maszyny JVM, która obsługuje 32-bitowe biblioteki DLL.

Twoje wybory są:

  • Przełączanie się w 32-bitowym JVM. (Możesz można uruchomić 32-bitową maszynę JVM na 64-bitowym systemie operacyjnym ...)
  • Port DLL na 64-bitowy.
  • Przełącz na alternatywną bibliotekę, która jest czystą Javą lub ma 64-bitową bibliotekę DLL.

I have tried running in a 32-bit VM, which works in eclipse, but when I export the project, I get the same error.

To może tylko oznaczać, że używasz 32-bitowej JVM do uruchomienia Eclipse i 64-bitowej JVM do uruchomienia aplikacji poza Eclipse. (Chodzi o to, w jaki sposób uruchomić aplikację, a nie jak je wyeksportować ...)

+1

+1 Nie znam żadnego systemu operacyjnego, który umożliwia aplikacjom 64-bitowym ładowanie 32-bitowych bibliotek współużytkowanych. Nie jest ograniczeniem Javy. –

+0

Znalazłem to pytanie i odpowiedź po długim długim ciągu wyszukiwań, dlaczego mój kod zawiódł. To rozwiązało to. Stukrotne dzięki. Nauczyłem się czegoś dzisiaj! – KjetilNordin

2

Jedynym sposobem korzystania z 32-bitowej biblioteki udostępnionego z 64-bitowym JVM jest uruchomienie dodatkowego 32-bitowe JVM i dostęp do niego za pośrednictwem RMI, JMS lub jakiejś formy wiadomości.

Jest to nieodłączne ograniczenie programów 64-bitowych (nie tylko Java), że nie może wymieniać wskaźników z biblioteką 32-bitową.