【发布时间】:2017-05-03 03:35:00
【问题描述】:
对于不具描述性的标题,我深表歉意,但我不确定如何用一句话来概括这一点。我拥有的是一个较旧的 DLL 文件,它从 java 中的默认包中调用所有内容。我无法在没有反射的情况下从默认包中导入这些类,我还需要重构它们。问题是我没有 DLL 的源代码,而且不可能得到它。我创建了一个重定向所有方法调用的中间 dll。例如,在 Java 中,我调用 refactoredMethod,它在中间 DLL 中调用 refactoredMethod,而中间 DLL 在原始 DLL 中调用 originalMethod。在原始 DLL 尝试执行以下操作之前,此方法工作正常:
jclass cls = (*env)->FindClass(env, "UnpackagedClass");
但很明显,由于我已经重构了这个类并将它移到了一个包中,所以它失败了。所以我想知道是否有可能替换
的所有实例jclass cls = (*env)->FindClass(env, "UnpackagedClass");
在原始 DLL 中带有
jclass cls = (*env)->FindClass(env, "com/test/RefactoredClass");
来自中间 DLL。顺便说一句,在有人说之前,由于它的大小,无法重写原始DLL,除此之外不需要任何维护,我有权使用它。谢谢。
【问题讨论】:
-
DLL 从哪里得到
UnpackagedClass?假设它是一个 jar 文件,你能用一个class UnpackagedClass extends com/test/RefactoredClass {...}替换这个 jar 文件吗? -
也许你可以用类加载器试试脏东西...
标签: java c++ dll java-native-interface