我为这个不起眼的头衔道歉,但我不确定如何用一句话来概括。我所拥有的是一个较旧的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,除此之外它不需要任何维护,我有权使用它。谢谢。
答案 0 :(得分:0)
如果您没有机会更改原始DLL,请考虑使用适配器模式。
此模式用于您希望将一个界面适应另一个界面的情况。
我知道这可能会在你的Java实现中创建很多类,但是如果你别无选择,我就会这样做。
看一下从包内访问类的超级简单适配器:
https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo028