java 动态库卸载_java 卸载动态链接库

December 09, 2023
测试
测试
测试
测试
3 分钟阅读

大家好,又见面了,我是你们的朋友全栈君。

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Iterator;

import java.util.Vector;

public class FreeDynamicDll {

static {

// 首先确保这些dll文件存在

System.load(“c:/test/Decode.dll”);

}

/**

* 卸载已经装载的dll

*

* @param dllName

* 库名,如Decode.dll

*/

private synchronized void freeDll(String dllName) {

try {

ClassLoader classLoader = this.getClass().getClassLoader();

Field field = ClassLoader.class.getDeclaredField(“nativeLibraries”);

field.setAccessible(true);

Vector libs = (Vector) field.get(classLoader);

Iterator it = libs.iterator();

Object o;

while (it.hasNext()) {

o = it.next();

Field[] fs = o.getClass().getDeclaredFields();

boolean hasInit = false;

for (int k = 0; k < fs.length; k++) {

if (fs[k].getName().equals(“name”)) {

fs[k].setAccessible(true);

String dllPath = fs[k].get(o).toString();

if (dllPath.endsWith(dllName)) {

hasInit = true;

}

}

}

if (hasInit) {

Method finalize = o.getClass().getDeclaredMethod(

“finalize”, new Class[0]);

finalize.setAccessible(true);

finalize.invoke(o, new Object[0]);

it.remove();

libs.remove(o);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String args[]) {

FreeDynamicDll t = new FreeDynamicDll();

t.freeDll(“Decode.dll”);

}

}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144205.html原文链接:https://javaforall.cn

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多