从我的Java应用程序中,我希望在尝试加载它之前查明用户定义的dll是32位还是64位。找出一个DLL是从Java的32位还是64位
我知道(以编程方式)我的应用程序运行的JVM是32位还是64位。我也知道(以编程方式)主机是Windows还是Linux。
如何在调用“System.loadLibrary()”方法之前以编程方式确定dll是32位还是64位?
从我的Java应用程序中,我希望在尝试加载它之前查明用户定义的dll是32位还是64位。找出一个DLL是从Java的32位还是64位
我知道(以编程方式)我的应用程序运行的JVM是32位还是64位。我也知道(以编程方式)主机是Windows还是Linux。
如何在调用“System.loadLibrary()”方法之前以编程方式确定dll是32位还是64位?
在Windows上,需要像管这个
dumpbin /headers lib.dll | findstr /i "machine magic"
这是使用dumpbin
实用程序,通常是安装了Visual Studio中,findstr
是一个系统实用程序,我不知道是否有refistributable版本dumpbin
。
只需从java执行这个命令并对结果进行一些基本的比较检查即可。
如果我必须启动一个单独的进程,那么我知道如何从C/C++使用Win32 API来完成它。我想知道Java是否有一些内置功能(API)来检测库的位数。 –
@SantoshTiwari在这种情况下,Windows使用的文件格式称为PE http://en.wikipedia.org/wiki/Portable_Executable,也许如果你将谷歌“java pe header”,你会发现一些对你有用的东西或某些人已经在java中引用了这样一个实用程序。 – user1797612
尝试加载它并检查加载失败时引发的异常吗? – millimoose
谢谢。是的,如果出现问题,我确实会得到一个异常(依赖不满足,位不匹配,...)。异常(trace)是否包含足够的相关信息,以便我推断可靠地推断dll的位数? –
[如何检测给定的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) –