2012-11-21 95 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

相关问题