精华内容
下载资源
问答
  • java调用dll
    千次阅读
    2021-06-01 19:35:35

    项目中有需要使用java调用c++或c的某些已经写好的方法,这时需要c++或c生成dll文件,java使用jna的方式进行调用。

    1.引入jna相关依赖

    <dependency>
         <groupId>com.sun.jna</groupId>
         <artifactId>jna</artifactId>
         <version>3.0.9</version>
    </dependency>
    

    2.代码

    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.Platform;
    
    /**
     * @Author: yang.fu.ren
     * @Date: 
     * @Description: 
     */
    public class DecryptUtil{
    
        /**
         * 声明解密的接口以及对应的方法
         */
        public interface CLibrary extends Library {
    
            // DLL文件默认路径为项目根目录,若DLL文件存放在项目外,请使用绝对路径。(此处:(Platform.isWindows()?"DatEnDe":"c")指本地动态库DatEnDe.dll)
            CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? System.getProperty("user.dir") + "\\src\\main\\resources\\DatEnDe" : System.getProperty("user.dir") + "\\src\\main\\resources\\libDatEnDe"),
                    CLibrary.class);
    
            // 声明将要调用的DLL中的方法,可以是多个方法(此处示例调用本地动态库DatEnDe.dll中的printf()方法)
            int DataDeCrypt(byte[] byteArr, int length);
        }
    
    
    
    更多相关内容
  • java调用dll方法总结

    2020-08-28 11:04:22
    本篇文章小编给大家整理了java调用dll的方法的总结,有需要的朋友参考学下一下吧。
  • java调用c++动态库例子,NetSdk.dll 文件拷贝至JDK/bin目录下
  • This document is the API specification for the JNA library for simplified native library access for Java.
  • Java调用dll示例

    2016-01-15 16:17:52
    Java调用dll示例,Java命名方法,C++实现生成DLL供JAVA调用
  • java调用dll或so库示例

    2017-08-31 10:01:59
    完整演示使用JNI开发JAVA和C++交互的例子,本示例提供了在Windows和linux上的编译脚本。请参考JNI的相关文章,如有疑问可留言
  • java调用dll接口

    2016-03-31 17:44:46
    java调用dll接口,备份供大家察看,谢谢大家共享。
  • Java调用Dll一个例子,台半条码打印机
  • Java调用C++ DLL库方法

    2020-12-22 18:21:59
    近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这涉及到Java调用DLL的问题。经过查找,实现了一个简单的例子。  1、第一步,先在Java中新建一个类  ...
  • Java调用dll

    2015-08-18 15:41:16
    用到的资源在压缩包里都有; 环境win7 64位 1.6jdk ;vs c++ 生成64位 dll jni 在C:\Program Files\Java\jdk1.6\include
  • java调用c实现aes文件加密。aes中的有限域通过查表方式实现,效率提高70%。
  • 因为项目的需求,要在JAVA项目中调用Windows的Dll(动态链接库)文件,之前用Jni调用过C写的Dll文件,比较麻烦,这里不多说,网上也有很多这方面的文档。在网上找到一个开源的组件JNative,使用后感觉比较方便
  • 1、需要将JNativeCpp.dll和需要调用dll放到C:\WINDOWS\system32目录下。 2、将JNative.jar放到项目下。 3、如果运行时还是提示找不到你调用dll,那么将mscoree.dll也放到C:\WINDOWS\system32目录下并注册此dll。...
  • 一个用于在java调用dll动态代码库的开源组件,JNative-1.3.2
  • 如何用java调用dll,详细图解

    千次阅读 2021-03-03 12:14:07
    今天就来为大家介绍一下,如何用java调用dll,并且通过详细的图片为大家展示。首先,我们采用的方法是JNI,是java平台的一部分,可用于让java和其他语言编写的代码进行交互。下面是从网上摘取的JNI工作示意图:总体...

    在我们日常的使用过程当中,java的使用率是非常高的。今天就来为大家介绍一下,如何用java调用dll,并且通过详细的图片为大家展示。

    首先,我们采用的方法是JNI,是java平台的一部分,可用于让java和其他语言编写的代码进行交互。下面是从网上摘取的JNI工作示意图:

    aa422b425ea7d38e8c2474b72df250cc.gif

    总体说一下,先在java中建立一个类,通过javac生成.class,再由javah生成.h;然后将.h复制到VC下,由VC实现具体函,并编译通过后生成DLL,将DLL放入java工程中使用,完成。

    下面通过具体的实例为大家说明一下。

    第一步,建java类:装载DLL,声明要使用DLL方法,具体实现由DLL负责;代码如下:public class Java2cpp

    {

    static

    {

    System.loadLibrary("javaCallcpp");

    }

    public native int DLL_ADD(int a, int b); //加

    public native int DLL_SUB(int a, int b); //减

    public native int DLL_MUL(int a, int b); //乘

    public native int DLL_DIV(int a, int b); //除

    public static void main(String args[])

    {

    int sum = 0;

    Java2cpp test = new Java2cpp();

    sum = test.DLL_ADD(2, 4);

    System.out.println("Java call cpp dll result:" + sum);

    }

    }

    第二步,生成.h文件:cmd 到Java2cpp.java目录下,操作包括下面这些。

    1.javac Java2cpp.java生成java2cpp.class

    2.javah Java2cpp生成Java2cpp.h头文件,图片内容如下:

    2c234d3250c4d1b9427feec71fc85377.png

    287e9d8a84877f02cd80914d00134010.png

    需要注意的是,Java2cpp.h这个头文件的内容是不能修改的,否则会出错。

    第三步,制做VC动态库:创建一个C/C++动态库工程,命名为javaCallcpp,导入java2cpp.h并实现其方法,代码如下:#include "Java2cpp.h"

    #include "dllApi.h"

    JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1ADD(JNIEnv * env, jobject obj, jint a, jint b)

    {

    int

    var = 0;

    var = DLL_API_ADD(a, b);

    return var;

    }

    JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1SUB(JNIEnv * env, jobject obj, jint a, jint b)

    {

    int

    var = 0;

    var = DLL_API_SUB(a, b);

    return var;

    }

    JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1MUL(JNIEnv * env, jobject obj, jint a, jint b)

    {

    int

    var = 0;

    var = DLL_API_MUL(a, b);

    return var;

    }

    JNIEXPORT jint JNICALL Java_Java2cpp_DLL_1DIV(JNIEnv * env, jobject obj, jint a, jint b)

    {

    int

    var = 0;

    var = DLL_API_DIV(a, b);

    return var;

    } //此文件完

    加DLL_API_ADD()、减DLL_API_SUB()、乘DLL_API_MUL()、除DLL_API_DIV()四个函数在别的文件中实现,文件名是dllApi.cpp,实现代码如下:int DLL_API_ADD(int a, int b)

    {

    return (a + b);

    }

    int DLL_API_SUB(int a, int b)

    {

    return (a - b);

    }

    int DLL_API_MUL(int a, int b)

    {

    return (a * b);

    }

    int DLL_API_DIV(int a, int b)

    {

    return (a / b);

    } //此文件完

    此时工程还编译不过,因为include出错,需添加JNI所在的目录,如下图所示:

    ce02326a6738d3131802bdef384576ae.png

    第四步、编译动态库工程:生成javaCallcpp.dll,并将这个动态库复制到java工程目录如下图所示:

    aa830d48a4f5752fa621b7051d9cc801.png

    第五步、使用DLL:运行java程序,结果如下图所示:

    21cca6619d86293139fb0fb5970b3c07.png

    到此为止,java调用dll就全部完成了。

    上面就是关于如何用java调用dll的详细操作过程。想要了解更多java经典例子,敬请关注奇Q工具网。

    推荐阅读:

    展开全文
  • 大华视频文件分割下载,根据大华提供的win64的dll文件,通过java代码对C代码进行调用,获取大华录像设备中保存的视频
  • Java调用DLL源代码

    热门讨论 2016-05-26 09:59:29
    Java调用DLL源代码JNA和JNative
  • java调用dll文件的实例

    2012-11-20 17:53:32
    这是java采用jni技术调用dll(动态链接库的一个demo),不需要任何改动,自己可以用,很适合初学者
  • Java调用dll文件

    千次阅读 2021-11-09 23:12:54
    1. C++创建dll 1.1 项目与工具 Visual Studio 2019 1.2 步骤与代码 ①使用VS创建动态链接库(DLL)项目 ②设置项目名与项目地址 创建好的效果如下: ③创建choosefiles.cpp源文件和choosefiles.h...

    目录

    1 C++创建dll

    1.1 项目与工具

    1.2 步骤与代码

    2 Java使用JNA调用dll

    2.1 项目与工具

    2.2 步骤与代码

    3 实际效果

    4 参考链接


    1 C++创建dll

    1.1 项目与工具

    Visual Studio 2019

    1.2 步骤与代码

    ①使用VS创建动态链接库(DLL)项目

    ②设置项目名与项目地址

    创建好的效果如下:

    ③创建choosefiles.cpp源文件和choosefiles.h头文件 

     

     ④choosefiles.h

    #ifdef CHOOSEFILES_EXPORTS
    #define CHOOSEFILES_API __declspec(dllexport)
    #else
    #define CHOOSEFILES_API __declspec(dllimport)
    #endif
    
    extern "C" CHOOSEFILES_API char* chooseFiles();

     ⑤choosefiles.cpp

    #include "pch.h"
    #include "framework.h"
    #include "choosefiles.h"
    #include <iostream>
    #include <windows.h>
    #include <Commdlg.h>
    #include <tchar.h>
    
    using namespace std;
    
    /*
    TCHAR*转char*
    */
    char* LPWSTR2LPSTR(LPWSTR lpwszStrIn)
    {
        LPSTR pszOut = NULL;
        if (lpwszStrIn != NULL) {
            int nInputStrLen = wcslen(lpwszStrIn);
            int nOutputStrLen = WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
            pszOut = new char[nOutputStrLen];
            if (pszOut != NULL) {
                memset(pszOut, 0x00, nOutputStrLen);
                WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);
            }
        }
        return  pszOut;
    }
    
    CHOOSEFILES_API char* chooseFiles() {
    
        OPENFILENAME ofn;
        TCHAR szOpenFileNames[80 * MAX_PATH] = { 0 };
        TCHAR szPath[MAX_PATH];
        TCHAR szFileName[80 * MAX_PATH];
    
        int nLen = 0;
        TCHAR* p = NULL;
        ZeroMemory(&ofn, sizeof(ofn));
    
        // 结构体大小
        ofn.lStructSize = sizeof(ofn);
    
        // 拥有着窗口句柄
        ofn.hwndOwner = NULL;
    
        // 接收返回的文件名,注意第一个字符需要为NULL
        ofn.lpstrFile = szOpenFileNames;
    
        // 缓冲区长度
        ofn.nMaxFile = sizeof(szOpenFileNames);
    
        // _T可替换为TEXT,使用_T需要引tchar.h
        ofn.lpstrFile[0] = _T('\0');
    
        // 设置过滤
        ofn.lpstrFilter = _T("All\0*.*\0.mp4\0*.mp4\0.avi\0*.avi\0.mkv\0*.mkv\0.rmvb\0*.rmvb\0.f4v\0*.f4v\0.flv\0*.flv\0.m4v\0*.m4v\0.mpg\0*.mpg\0\0");
    
        // 过滤器索引
        ofn.nFilterIndex = 1;
    
        // 窗口标题
        ofn.lpstrTitle = _T("请选择视频");
    
        // 文件必须存在、允许多选、隐藏只读选项、对话框使用资源管理器风格的用户界面
        // 官方文档:https://docs.microsoft.com/en-us/windows/win32/api/commdlg/ns-commdlg-openfilenamea
        ofn.Flags = OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_EXPLORER;
    
        // 定义字符串,用于拼接所选的所有文件的完整路径
        string str = "***";
    
        // 如果打开文件失败,则不操作;打开成功才操作
        if (GetOpenFileName(&ofn)) {
            // 把第一个文件名前的复制到szPath,即:  
            // 如果只选了一个文件,就复制到最后一个'/'  
            // 如果选了多个文件,就复制到第一个NULL字符  
            lstrcpyn(szPath, szOpenFileNames, ofn.nFileOffset);
    
            // 当只选了一个文件时,下面这个NULL字符是必需的.  
            // 这里不区别对待选了一个和多个文件的情况
            szPath[ofn.nFileOffset] = '\0';
            nLen = lstrlen(szPath);
    
            // 如果选了多个文件,则必须加上'//'  
            if (szPath[nLen - 1] != '\\') {
                lstrcat(szPath, _T("\\"));
            }
    
            // 把指针移到第一个文件  
            p = szOpenFileNames + ofn.nFileOffset;
    
            // 对szFileName进行清零
            ZeroMemory(szFileName, sizeof(szFileName));
    
            while (*p) {
                // 读取文件名
                string fileName = LPWSTR2LPSTR(p);
    
                // 读取文件所在文件夹路径
                string filePath = LPWSTR2LPSTR(szPath);
    
                // 拼接文件完整路径
                string completePath = filePath + fileName;
    
                // 拼接字符串
                str += completePath + "***";
    
                //移至下一个文件
                p += lstrlen(p) + 1;
            }
        }
    
        // 将string转为char*
        char* strc = new char[strlen(str.c_str()) + 1];
        const char* cc = str.c_str();
        strcpy_s(strc, str.size() + 1, cc);
    
        return strc;
    }

     ⑥改成64位程序(由于我使用的是64位的jdk,所以需要生成64位的dll)

     ⑦生成解决方案

    生成成功提示如下:

    dll文件:

    2 Java使用JNA调用dll

    2.1 项目与工具

    idea、maven(选择maven-archetype-quickstart骨架)、Java8、JNA

    2.2 步骤与代码

    ①创建好项目之后,创建resources文件夹,并将dll文件复制进去

    ②设置项目资源文件夹

    设置好后结果如下:

    ③添加jna依赖并刷新maven

    <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
    <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>5.5.0</version>
    </dependency> 

    ④创建DLL接口

    package cxzgwing;
    
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    
    public interface DLL extends Library {
        DLL dll = Native.load("choosefiles", DLL.class);
    
        String chooseFiles();
    }

    ⑤调用

    package cxzgwing;
    
    public class App {
        public static void main(String[] args) {
            System.setProperty("jna.encoding", "GBK");
            System.out.println(DLL.dll.chooseFiles());
        }
    }
    

    3 实际效果

    若点击取消,则输出三个星号(***):

     可选择显示的文件类型:

     

    4 参考链接

    [1] Aimls.Java使用JNA调用C/C++动态链接库dll.2019-07-26 14:44:22

    Java使用JNA调用C/C++动态链接库dll_哔哩哔哩_bilibili

    [2] 晨曦之光Wing.C++打开文件选择框多选文件.2021-10-09 00:03:40

    C++打开文件选择框多选文件_晨曦之光Wing的博客-CSDN博客

    展开全文
  • Java调用动态链接库 Java 调用 DLL 源码
  • Java调用C#DLL

    2018-04-12 13:58:07
    该资源包含C#开发DLL源码,Java调用DLL源码,测试已通过
  • java 调用dll 库文件

    2021-03-05 16:05:25
    loadometer.dll 文件名称 package com.weighbridge.util; import com.sun.jna.Library; import com.sun.jna.Native; public abstract interface JnaLibrary extends Library { public static final JnaLibrary...

    loadometer.dll  文件名称    dll放在resources中       

    package com.weighbridge.util;
    
    
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    
    
    public abstract interface JnaLibrary
    extends Library
    {
    public static final JnaLibrary INSTANCE = (JnaLibrary)Native.load("loadometer", JnaLibrary.class);
    
    public abstract double getWeight(String paramString, int paramInt);
    }
    
    package com.weighbridge.test;
    
    
    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.sun.jna.Native;
    import com.weighbridge.util.DownloadPdf;
    import com.weighbridge.util.JnaLibrary;
     
     
    @RestController
    public class WeighbridgeController { 	 
    
    	public static final JnaLibrary INSTANCE = (JnaLibrary)Native.load("loadometer", JnaLibrary.class);
    	 
    	@RequestMapping(value = "/getWeighbridge")
    	@ResponseBody
    	public double test() {
    		double weight = INSTANCE.getWeight("Pon", 3);
    		return weight;
    	}
    }

     

    这里碰到一个问题 dll 是32位系统的文件  ,但是测试的电脑是 64位的 jdk也是64位的无法测试   提示: “不是有效的 Win32 应用程序”

    解决办法是:java调用时 用32位的jdk 去测试就可以成功调用了

    总结: java 调用dll 时   系统版本 64位dll 对应 64位的jdk        32位dll 对应32位jdk

     

    https://blog.csdn.net/u014104286/article/details/53391394 参考博客

     

     

    展开全文
  • Java调用dll实例

    2015-10-13 14:47:04
    Java调用dll实例,这里包含了jacob+jawin+jna+jnative方法在内的各种资源以及demo,有许多都是CSDN中的下载资源。由于本人也是新手,为了下载关于调用dll的相关资源消耗了大量积分,特此将手中资源进行汇总,为了方便...
  • 最近应项目的需求,需要通过java调用dll动态库,于是找了一些资料,在此记录一下实现过程,包括出现的错误处理。写一个包含static System.loadLibrary()和native修饰过的方法的类,如下:package com.android.test;...
  • 实例中演示了各种参数形式的DLL函数调用,如:基本数据类型、基本数据类型的指针和引用、结构体、结构体的指针和引用、函数指针和回调函数、字符串指针、输入数组、输出数组等,非常实用。
  • java调用dll动态链接库

    千次阅读 2021-08-06 15:54:45
    后缀名是h,弄好以后把这个h文件(也就是头文件)发给负责写C的人员,让其进行开发,开发完后会给我们一个dll动态链接库,我只需要在java层的 package com.pwd.cryptography.controller; public class CallJniController {...
  • java 调用dll

    2019-03-14 01:07:03
    NULL 博文链接:https://likenice.iteye.com/blog/305159

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,757
精华内容 27,502
关键字:

java调用dll

友情链接: 帧间差分法.rar