1

我遇到了一个问题。我将 Chilkat 用于 Java,据我所知,没有任何 Maven 回购。因为它是一个双组件库 - 我需要通过 System.load() 注入 .dll。这部分对我来说很清楚,但它们也提供了一些东西,比如包装器,它调用 .dll 中的方法。

所以,我不想将他们的 .jar 导入我的项目,但是,然后我自己调用本机方法,它因 java.lang.UnsatisfiedLinkError 而失败。因为,然后 java 尝试调用一个本地方法,它在它的名称的开头添加了一些东西。例如:如果我在我的包中声明了本机方法,那么它将被调用,java 会将所有包层次结构名称添加到它的名称中。

我可以以某种方式直接通过其名称调用本机方法,而无需任何运行时“适应”吗?

4

1 回答 1

0

javac可以生成您可能正在寻找的绑定... DLL 导出查看器(以及其他几个)可以列出导出的方法。或者对于 SO,只需使用dumpbin /EXPORTS ./filename. 方法名称会在运行时更改是不现实的,这只会在构建时混淆它们时发生一次 - 这通常会排除所有需要保持可访问性(用于反射)的对象。

只需启动一个新的 JNI 项目并了解它如何在大大降低复杂性的情况下工作。仍然有机会,这个 JAR 可能会在本机程序集中传递许可信息 - 或者本机程序集为 JAR 执行加密功能。商业图书馆不应被视为开源 - 首先我会阅读他们的许可条款。

于 2021-09-12T01:43:07.093 回答