`

java 卸载动态链接库

阅读更多
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<Object> libs = (Vector<Object>) field.get(classLoader);
   Iterator<Object> 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");
 }
}


 

分享到:
评论

相关推荐

    键盘钩子毕业论文

    1.Windows消息处理机制。 2.钩子函数的分类、使用、...3.Windows动态链接库的运行机制和使用方法。 4.SOCKET编程原理。 5.VC++ MFC编程基础。 6.Andorid应用开发。 7. 计算机信息安全管理与防范意思的部分内容。

    上期所股指期货程序交易CTP接口(Java源码+jar支持包)

    上传个自己封的java接口,源码和依赖的jar包都在压缩文件里 test目录下有行情的demo,交易部分的API还没完全做好,可以连上前置和登录 ...变更:CTP动态链接库置入jar包 变更:将JCTP相关类独立出CTP调用包

    SWT WIN32 Extension

    使用SWT Win32 Extension,您将不需要创建原生的动态链接库来调用操作系统动态链接库的系统API或者方法。您仅仅需要做的就是编写Java代码,SWT Win32 Extension来负责剩下的部分。SWT Win32 Extension提供了一系列的...

    JCTP(CTP JAVA接口) 0.3.2

    JCTP 0.3.2 2013-2-27 增加:JCTPStructUtil工具类 修正:交易API部分函数出现空指针异常的问题 修正:行情API部分函数出现空指针异常的问题 ...变更:CTP动态链接库置入jar包 变更:将JCTP相关类独立出CTP调用包

    易语言程序免安装版下载

     静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...

    asp.net知识库

    完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) ...

    Oracle数据库管理员技术指南

    3.4.3 为卸载表的导出过程的选择语句 指定一个查询 3.4.4 导出/导入预计算优化程序统计 数据 3.4.5 可移动表空间 3.5 回顾 第4章 设计高可用性数据库 4.1 如何发现和保护“致命的弱点” 4.2 复用数据库控制...

    Visual C++实践与提高-COM和COM+篇『PDF』

    2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 ...

    Oracle11g从入门到精通

    8.4.3 使用数据库链接 8.4.4 使用配置文件 第9章 数据库空间管理 9.1 建立数据库时的空间设计 9.1.1 指定system表空间初值 9.1.2 设置其他表空间初值 9.2 在空间充足时的管理 9.2.1 使用数据字典动态监视 ...

    Oracle11g从入门到精通2

    8.4.3 使用数据库链接 8.4.4 使用配置文件 第9章 数据库空间管理 9.1 建立数据库时的空间设计 9.1.1 指定system表空间初值 9.1.2 设置其他表空间初值 9.2 在空间充足时的管理 9.2.1 使用数据字典动态...

    WODECMS开源内容管理系统

    读写频繁,容易阻塞的需求,可以使用主从库读写分离,mysql类switchDB方法自由切换。 高性能扩展 可以继承memcache,redis等内存缓存运用 大数据量 无需担心数据量足够大的时候,系统跑不了,WODECMS是轻便灵活的,...

    C#微软培训资料

    &lt;&lt;page 1&gt;&gt; page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...

Global site tag (gtag.js) - Google Analytics