2012-01-19 94 views
2

== EDITED ==64ビットのDLLを64ビットのJavaプログラムでロードできません

Libと関係があると思います。私はMsmqJavaを使用していて、Queue.sendBytes()を呼び出すとエラーが発生しますが、Queue.send(Message)を呼び出すとそのように見えません。すべてに感謝します。

==私は(私はDUMPBINでそれをチェックしました)64ビット用にコンパイルされた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

私はあなたがAMD64を使用しているのを見ます。あなたはインテル64ビットで試しましたか? – Cratylus

+2

64ビットシステムでは、 'system32 'のすべてのファイルは64ビットです。 32ビットのファイルは 'SysWOW64'にあるので、DLLは32ビットのライブラリをロードしようとしていません。ファイルが64ビットであるにもかかわらず、命名(フォルダ名とファイル名に32を含む)を保持するMSを責める... –

+0

ありがとう。他のコンピュータと一緒に試してみることはできません。一番奇妙なのは、私は別のアプリケーションがロードされているだけですが、これはうまくいきません...私は本当に自分の神経に乗っています... – rpvilao

答えて

0

エラーEXCEPTION_ACCESS_VIOLATION(0xc0000005)は、DLLのコードバグによって発生します。アクセス違反が発生したということは、DLLがロードされているということです。 Queue.send()の動作とQueue.sendBytes()の症状には、DLLにバグがあります。

関連する問題