Не удается загрузить 64-битную DLL в 64-битной Java-программе - PullRequest
2 голосов
/ 19 января 2012

== РЕДАКТИРОВАНИЕ ==

Угадай, это как-то связано с Либ. Я использую MsmqJava , и похоже, что если я вызываю Queue.sendBytes (), возникает ошибка, но если я вызываю Queue.send (Message), это не так. Спасибо за все.

== РЕДАКТИРОВАНИЕ ==

У меня есть DLL, скомпилированная для 64-битной системы (я проверил ее с помощью dumpbin).

Я пытаюсь запустить программу на Java, которая использует эту библиотеку, но безуспешно. System.getProperty("sun.arch.data.model") dumps 64. Я успешно использовал эту библиотеку с другими Java-программами, так что я знаю, что это не так. Это должен быть способ, которым я компилирую или создаю экземпляр JVM. Кто-нибудь знает, что может происходить? Ошибка следующая:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000006da48ad7, pid=3208, tid=4868
#
# JRE version: 6.0_24-b07
# Java VM: Java HotSpot(TM) 64-Bit Server VM (19.1-b02 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V  [jvm.dll+0x258ad7]
#
# An error report file with more information is saved as:
# hs_err_pid3208.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp

Я заметил, что по какой-то причине действительно не знаю, нормально ли это, JVM пытается загрузить кучу 32-битных библиотек Windows:

Dynamic libraries:
0x0000000000400000 - 0x000000000042e000     C:\Windows\system32\java.exe
0x0000000077420000 - 0x00000000775c9000     C:\Windows\SYSTEM32\ntdll.dll
0x0000000077200000 - 0x000000007731f000     C:\Windows\system32\kernel32.dll
0x000007fefd4e0000 - 0x000007fefd54c000     C:\Windows\system32\KERNELBASE.dll
0x000007fefe7e0000 - 0x000007fefe8bb000     C:\Windows\system32\ADVAPI32.dll
0x000007feff090000 - 0x000007feff12f000     C:\Windows\system32\msvcrt.dll
0x000007feff710000 - 0x000007feff72f000     C:\Windows\SYSTEM32\sechost.dll
0x000007feff130000 - 0x000007feff25d000     C:\Windows\system32\RPCRT4.dll
0x000000006d7f0000 - 0x000000006def4000     C:\Program Files\Java\jre6\bin\server\jvm.dll
0x0000000077320000 - 0x000000007741a000     C:\Windows\system32\USER32.dll
0x000007fefd950000 - 0x000007fefd9b7000     C:\Windows\system32\GDI32.dll

1 Ответ

0 голосов
/ 23 марта 2012

Ошибка EXCEPTION_ACCESS_VIOLATION (0xc0000005) вызвана ошибкой кода DLL.Тот факт, что вы получаете нарушение доступа, означает, что DLL загружается.Ваш признак работы Queue.send () и сбоя Queue.sendBytes () говорит о наличии ошибки в DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...