我可以控制Java中的JNI本机方法调用名称吗?
我遇到了一个问题。我使用Chilkat for Java,据我所知,它没有任何Maven回购协议。因为它是一个双组件库——我需要注入。dll,通过系统。加载()。这一部分我很清楚,但它们也提供了一些东西,比如wrapper,它在中调用方法。dll
所以,我不想进口他们的产品。jar到我的项目中,但是,然后我自己调用本机方法,它在java中失败。不满意的链接错误。因为,然后java试图调用一个本机方法,它在名称的开头添加了一些东西。例如:如果我在包中声明本机方法,那么它将被调用,java将把所有包层次结构名称添加到它的名称中
我是否可以直接按本机方法的名称调用它,而不进行任何运行时“调整”
# 1 楼答案
^{} 可以生成您可能正在寻找的绑定DLL export viewer(以及其他几个)可以列出导出的方法。或者,只需使用
dumpbin /EXPORTS ./filename
。方法名在运行时会发生更改并不是现实,这只在构建时混淆它们时发生一次——这通常会排除所有需要保持可访问性(用于反射)的对象只需启动一个新的JNI项目,了解它是如何以大大降低的复杂性工作的。仍然有可能,这个JAR可能会在本机程序集中传递许可信息,或者本机程序集为JAR执行加密功能。商业图书馆不能像开源图书馆一样对待——首先,我会阅读它们的许可条款