无法在64位java程序中加载64位DLL

时间:2012-01-19 11:13:55

标签: java dll 64-bit java-native-interface 32-bit

== EDITED ==

猜猜这与Lib有关。我正在使用MsmqJava,看起来如果我调用Queue.sendBytes()会发生错误,但如果我调用Queue.send(Message)则不会。谢谢你的一切。

== EDITED ==

我有一个为64位编译的DLL(我用dumpbin检查过它)。

我正在尝试运行一个使用该库但没有成功的Java程序。 System.getProperty("sun.arch.data.model")转储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正试图加载一堆windows 32位库:

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 :(得分:0)

错误EXCEPTION_ACCESS_VIOLATION(0xc0000005)是由DLL的代码错误引起的。您获取访问冲突意味着正在加载DLL。您的Queue.send()工作和Queue.sendBytes()失败的症状表明DLL中存在错误。