2012-01-19 145 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中存在一個錯誤。

相關問題