【发布时间】:2010-11-30 15:22:31
【问题描述】:
我正在尝试在 java 中卸载 dll。我已经阅读了this 和this,但您似乎无法保证 dll 会在某个时间实际被卸载。这是因为 System.gc() 只是“友好地请求”垃圾收集器运行。
所以这里是一个细分的情况。我有一个通过 JNI 提供一些功能的 dll。让我们将此 dll 称为 MainDll。 MainDll 是从对 System.load("MainDll") 的调用中加载的。我需要能够即时卸载和加载这个 dll。
是否可以创建另一个仅用于加载和卸载 MainDll 的 dll。让我们将此 dll 称为 LoaderDll。然后我可以简单地调用 System.load("LoaderDll") 并使用一些本机函数来加载和卸载 MainDll。这样做的原因是我可以访问本机系统上的函数,这些函数可以动态加载和卸载 dll。棘手的部分是,如果它是从 LoaderDll 内部加载的,我是否仍然能够访问我在 MainDll 中编写的本机函数。
对不起,如果这是一个令人困惑的问题。好像有点难以解释。
谢谢
【问题讨论】:
-
你想用这种方式解决什么问题?(有没有确定性加载和卸载的替代方案,只是想得到一个更好的主意)
-
为什么您需要能够动态加载/卸载 MainDLL?通常,加载/卸载问题出现在开发场景中,当 DLL 作为构建的一部分进行部署时。这是你的情况,还是有其他原因?
-
它是一个视频会议应用程序。我想卸载它有几个原因。通话结束后,有很多不同的事情需要清理。可能会出问题。例如,如果 H.323 堆栈中存在问题。如果驱动程序已可靠损坏或应用程序无法按预期运行,我需要确保可以卸载然后重新加载驱动程序。
标签: java dll java-native-interface