2012-01-19 121 views
2

==编辑==无法在64位Java程序中加载64位DLL

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

== == EDITED

我编译为64位(我已经DUMPBIN检查的话)的DLL。

我想运行一个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试图加载了一堆窗口的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 
+0

我看你使用的AMD.Did你尝试在英特尔64位? – Cratylus

+2

在64位系统上,'system32'中的所有文件都是64位。 32位文件位于“SysWOW64”中,因此该DLL不会尝试加载32位库。责备MS保持命名(包括文件夹名称和文件名中的32),即使文件是64位... –

+0

谢谢。我无法在其他电脑上试用,因为我没有其他电脑。最奇怪的是,我有另一个应用程序,加载得很好,但这个不...我真的越来越紧张... – rpvilao

回答

0

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

相关问题