admin 管理员组文章数量: 887021
java依赖dll,java
我想弄清楚加载DLL失败时缺少哪些从属DLL 。 通过使用Java的System#loadLibrary加载DLL ,我只会得到长的负退出代码,例如-1073741515而不是Windows错误消息,指出缺少哪个DLL 。 这对于解决该问题没有帮助。
我的想法是使用Java从DLL解析依赖的DLL ,然后逐一加载它们,以找出哪个抛出UnsatisfiedLinkError 。 我找到了一个名为pecoff4j的库,声称可以解析PE可执行文件,但无法解析导入的DLL名称:
PE pe = PEParser.parse("C:\\Users\\User\\Desktop\\my.dll");
final ImportDirectory importTable = pe.getImageData().getImportTable();
for (int i = 0; i < importTable.size(); i++)
{
String name = importTable.getName(i);
System.out.println(name);
}
由于名称似乎不可用,因此产生以下异常:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at org.boris.pecoff4j.ImportDirectory.getName(ImportDirectory.java:39)
ImportDirectory.java :
package org.boris.pecoff4j;
import org.boris.pecoff4j.util.DataObject;
import java.util.ArrayList;
import java.util.List;
public class ImportDirectory extends DataObject {
private List entries = new ArrayList();
private List names = new ArrayList();
private List nameTables = new ArrayList();
private List addressTables = new ArrayList();
public void add(ImportDirectoryEntry entry) {
entries.add(entry);
}
public void add(String name, ImportDirectoryTable names,
ImportDirectoryTable addresses) {
this.names.add(name);
nameTables.add(names);
addressTables.add(addresses);
}
public int size() {
return entries.size();
}
public String getName(int index) {
return names.get(index);
}
public ImportDirectoryTable getNameTable(int index) {
return nameTables.get(index);
}
public ImportDirectoryTable getAddressTable(int index) {
return addressTables.get(index);
}
public ImportDirectoryEntry getEntry(int index) {
return entries.get(index);
}
}
Visual Studio的dumpbin可以工作,但是我需要一个基于Java的解决方案来集成到应用程序中,该应用程序分发给不一定安装Visual Studio用户。
如果您认为使用Java加载DLL时有一种更好/更简单的方法来找出或防止DLL丢失,请随时告诉我。
版权声明:本文标题:java依赖dll,java 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1694613894h254082.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论