2012-11-21 125 views
2

從我的Java應用程序中,我希望在嘗試加載它之前查明用戶定義的dll是32位還是64位。找出一個DLL是從Java的32位還是64位

我知道(以編程方式)我的應用程序運行的JVM是32位還是64位。我也知道(以編程方式)主機是Windows還是Linux。

如何在調用「System.loadLibrary()」方法之前以編程方式確定dll是32位還是64位?

+3

嘗試加載它並檢查加載失敗時引發的異常嗎? – millimoose

+0

謝謝。是的,如果出現問題,我確實會得到一個異常(依賴不滿足,位不匹配,...)。異常(trace)是否包含足夠的相關信息,以便我推斷可靠地推斷dll的位數? –

+0

[如何檢測給定的PE文件(exe或dll)是64位還是32位]的可能重複(http://stackoverflow.com/questions/1153090/how-to-detect-that-a-given- pe-file-exe-or-dll-is-64-bit-or-32-bit) –

回答

0

在Windows上,需要像管這個

dumpbin /headers lib.dll | findstr /i "machine magic" 

這是使用dumpbin實用程序,通常是安裝了Visual Studio中,findstr是一個系統實用程序,我不知道是否有refistributable版本dumpbin

只需從java執行這個命令並對結果進行一些基本的比較檢查即可。

+0

如果我必須啓動一個單獨的進程,那麼我知道如何從C/C++使用Win32 API來完成它。我想知道Java是否有一些內置功能(API)來檢測庫的位數。 –

+1

@SantoshTiwari在這種情況下,Windows使用的文件格式稱爲PE http://en.wikipedia.org/wiki/Portable_Executable,也許如果你將谷歌「java pe header」,你會發現一些對你有用的東西或某些人已經在java中引用了這樣一個實用程序。 – user1797612

相關問題