封装DLL至jar包

封装DLL至jar包

dll一般在jar包外部调用,每个项目调用的人都需要loadLibrary,这样很麻烦,为了方便其他组调用dll,可以直接将dll封装至jar包,但是封装的时候由于loadLibrary需要以一个绝对路径,而dll由在jar内部,所以会导致报错,因此,可以考虑将dll从jar内部copy至运行缓存目录,或者用户主目录,然后再调用load方法,我将加载的方法写在interface的内部类的静态方法中,并且定义成员变量INSTANCE 用于接收内部类的静态方法实例化出来的接口实例。这样可以再加载类的时候就进行实例化,并且可以再实例化之前,先判断dll是否存在,如果不存在则从jar内部拷贝至指定目录。

public interface Geometric extends Library {
   

    Geometric INSTANCE = GeometricFactory.newInstance();

    int transformGeometry(byte[] geom, int length, double[] mat, byte[] resData, int[] resLen);

    class GeometricFactory {
   

        private GeometricFactory() {
    }

        public static Geometric newInstance() {
   
            String tempDir = System.getProperty("java.io.tmpdir");
            tempDir = tempDir.endsWith("\\") || tempDir.endsWith("/") ? tempDir : tempDir.concat("\\");
            final File dllFile = new File(tempDir.concat("libs\\geometric\\x64\\Geometric.dll"));
            if (!dllFile.exists()) {
   
                final URL url = Geometric.class.getClassLoader().getResource("libs");
                FileUtils.copyFromJar(url, "libs", tempDir);
            }
            final Geometric instance = (Geometric) Native.loadLibrary(tempDir
                    .concat("libs\\geometric\\x64\\Geometric.dll"), Geometric.class);
            return instance;
        }
    }
}

项目结构

拷贝jar内部文件夹及文件至指定目录代码如下:

public final class FileUtils {
   

    private static final int TMP_LENGTH = 4096;

    private FileUtils() {
    }

    public static void copyDir(final String sourcePath, final String newPath) {
   
        
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封装Matlab程序成DLL时,可能会遇到各种错误。这些错误通常源自以下几个方面: 1. 编译错误:在编译Matlab代码时,可能会出现语法错误、变量命名错误等。此时需要仔细检查代码中的错误,并行修正。 2. 函数接口错误:将Matlab函数封装DLL时,需要确保函数接口的一致性。如果函数接口与DLL的调用方式不匹配,就会出现错误。为了解决这类问题,我们可以使用MEX函数来调用Matlab函数。 3. 缺少依赖项:在封装Matlab程序成DLL时,可能会依赖一些其他库文件或函数文件。如果缺少这些依赖项,就会出现错误。解决这个问题的方法是,将缺少的文件加入到项目中,或者通过配置路径解决依赖关系。 4. 版本兼容性问题:Matlab的不同版本之间可能存在一些语法差异,因此在封装DLL的过程中,需要考虑版本兼容性。如果使用的Matlab版本与编译环境不一致,就可能会出现错误。为了解决这个问题,可以选择兼容性较好的函数、语法来编写代码。 5. 缺少编译器选项:在编译Matlab程序成DLL时,有时可能会缺少一些必要的编译器选项,导致编译错误。解决这个问题的方法是,查看编译器选项,确保所有必要的选项已经设置。 总之,封装Matlab程序成DLL期间的错误多种多样,但大多数都可以通过仔细检查代码、修正错误、解决依赖关系等方法来解决。如果遇到无法解决的问题,可以查阅Matlab的相关文档或请教其他有经验的开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值