zoukankan      html  css  js  c++  java
  • Web Project中加载dll文件的终极解决方案

    1.首先把要加载的dll文件拷贝到Web Project的src目录下

    2.声明一个TestDLL类,名字请根据实际命名

    package com.anllin.jni;

    public class TestDLL
    {
    public TestDLL(String... filenames)
    {
    // 取得src下的物理路径,
    String path = TestDLL.class.getResource("/").getPath();
    // 将路径里的%20替换成空格,不然在src目录下会找不到dll文件
    path = path.replaceAll("%20", " ");
    //output : /D:/myEclispe8.6 projects/jnitest/WebRoot/WEB-INF/classes/
    System.out.println(path);
    //注:使用System.load()时,文件名必须包含.dll后缀,如test1.dll
    for (String filename : filenames)
    {
    System.load(path + filename);
    }
    }

    public native void test1();

    public native void test2();

    public native void test3();
    }

    3.声明一个调用类TestInvoker,名字请根据实际命名

    package com.anllin.jni;

    public class TestInvoker
    {
    private TestDLL testDll;

    public TestInvoker()
    {
    // 注意,一定要确定DLL之间的依赖关系,谁先加载,谁后加载,不然会报错,先加载的放在前面
          testDll = new TestDLL("test1.dll", "test2.dll", "test3.dll");
    }

    public void test1()
    {
    testDll.test1();
    }

    public void test2()
    {
    testDll.test2();
    }

    public void test3()
    {
    testDll.test3();
    }
    }

    4.这种Dll文件加载方式的好处:

    a.当你有多个Web Project,每个都要去调用DLL时,就不冲突了,如果DLL是放在tomcat的bin下的话,每加载一次都是加载相同的dll,会报错,我做的项目就是这样。

    b.DLL文件好管理,放到src下就行,就算多个Web Project,每一份DLL都是一个拷贝,彼此之间不依赖,耦合性低。

    c.方便布署,将项目打包成war包后,就象一般项目一样,放到tomcat里就行了。

  • 相关阅读:
    Android通讯录查询篇ContactsContract.Data
    startActivityForResult 用法
    Android 开发 – 使用菜单
    屏幕旋转 转
    动态更改屏幕方向LANDSCAPE与PORTRAIT 转
    .使用ContactsContract API
    主题:android之XmlResourceParser类使用实例 转
    Android使用AttributeSet自定义控件的方法 转
    EmbossMaskFilter BlurMaskFilter
    字典转换成实体列表
  • 原文地址:https://www.cnblogs.com/zfc2201/p/2310033.html
Copyright © 2011-2022 走看看