java依赖dll,java - 使用Java查找/解析DLL的依赖DLL - 堆栈内存溢出

我想弄清楚加载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)

aHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS93UVpWVi5wbmc=

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丢失,请随时告诉我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在python中安装libusb-1.0,你需要按照以下步骤进行操作: 1. 确保你已经安装了libusb-1.0的依赖库pyusb。你可以使用以下命令来安装pyusb: ``` pip install pyusb ``` 2. 下载libusb-1.0的压缩文件,例如libusb-1.0.22.7z,并将其解压缩到任意文件夹中。 3. 打开解压缩后的文件夹,找到其中的MS64\dll\libusb-1.0.dll文件。 4. 将libusb-1.0.dll文件复制到你的Python安装目录下的Lib\site-packages\usb\backend文件夹中。 5. 现在,你应该可以在Python中使用libusb-1.0库了。 然而,根据你提供的引用内容和,看起来你可能已经遇到了一些问题。具体来说,错误信息指向了usb.backend.libusb1模块中的is_kernel_driver_active()和_check()函数。这可能表示你的代码中有一些与libusb-1.0的集成相关的问题。 为了解决这些问题,你可以尝试以下步骤: 1. 确保你的操作系统支持libusb-1.0。某些操作系统可能需要额外的驱动程序或配置才能正常使用libusb-1.0。 2. 检查你的Python代码中是否正确导入了libusb-1.0。你可以使用以下代码来确保正确导入: ```python import usb.backend.libusb1 ``` 3. 确保你的系统上已经安装了正确版本的libusb-1.0库。你可以尝试重新下载并安装最新版本的libusb-1.0。 4. 如果问题仍然存在,你可能需要查看更详细的错误信息,并可能需要在相关文档或讨论区中寻求帮助。 总之,安装libusb-1.0库需要确保正确安装了pyusb和libusb-1.0.dll,并解决任何与集成相关的问题。希望这些步骤能够帮助你成功安装libusb-1.0库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python-3.x - device.is_kernel_driver_active()无法在libusb-1.0.22.7z中运行吗? - 堆栈内存溢出](https://blog.csdn.net/weixin_34123023/article/details/116163753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值