精华内容
下载资源
问答
  • java调用dll文件

    2017-11-23 15:33:20
    java调用dll文件执行

    最近,进新公司,花了点时间取熟悉新框架开发,然后老司机丢了一个项目的SDK给我,边看边开发。

    然后这个项目是一个停车场调用摄像头识别车牌的项目,那么在这个过程中,他们告诉我,

    一般都是c语言之类的能程序调用摄像头这类硬件的接口,然后,java就不行,

    那么我们java开发停车场系统不调用摄像头了吗???

    不,为了实现java调用api接口,java出了这么一个包——jna.jar

    通过这个包里提供的线索就能使java调用dll文件。

    看图一:

    下面的JNADLL,就是调用jna包接口执行dll文件



    接口里面就这么写了,你只需要写出dll文件的相对路径,然后,调用JNA的包的接口来调用dll文件执行就好了。其实还有很多可以放上来供才考的,但是,具体代码因为不是我自己开发,所以我也不能随便拿出来展示...另外待会我说错了,教错了怎么办,所以先把简单的说说先...以后我消化完了,提供相关文章...

    展开全文
  • Java调用dll文件

    千次阅读 2020-04-21 23:20:55
    近期根据C++做了一个图片质量检测的项目,目前需要在在java中进行调用,所以先在C++上生成dll文件,然后基于java调用dll文件实现功能。 环境: C++:VS2017(之前配置opencv真是要了老命) java:idea2020+jdk1.8。 ...

    近期根据C++做了一个图片质量检测的项目,目前需要在在java中进行调用,所以先在C++上生成dll文件,然后基于java调用dll文件实现功能。

    环境:

    C++:VS2017(之前配置opencv真是要了老命)

    java:idea2020+jdk1.8。

    注意:jdk安装的时候小心点,path路径容易点编辑,千万别新建,会覆盖的。

    在这里插入图片描述
    接下来进入正文

    1. 创建Java项目,假设定义HelloWorld函数,其中“winproject1”是等会要调用的dll文件,现在进入cmd并cd到当前目录下面,然后javah -jni HelloWorld.HelloWorld,这样会在目录下面生成一个HelloWorld_HelloWorld.h。等会需要将这个头文件移到之前安装jdk目录里的include下面,如:D:%你的路径%\Java\include。

    在这里插入图片描述
    在这里插入图片描述

    2. 打开vs2017,创建一下新的控制台项目,然后需要配置项目包含目录的路径,将下面两个路径加进去,保险点还可以在附加目录里面加上这些路径。vs2017中编写上面头文件中的代码:

    JNIEXPORT void JNICALL Java_HelloWorld_HelloWorld_sayHello (JNIEnv *, jobject, jstring, jstring, jstring, jstring) { cout<<"hello world!"<<endl; }

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    **注:**其中#include "single_check.h"就是我定义检测函数的头文件,在下面的函数中可以调用自己定义的函数,从而让java执行里面的内容,可以调用函数。

    3.生成第一步中提到的winproject1.dll文件,直接点击生成-生成解决方案,便可以在项目路径(%项目名%\x64\Debug\winproject1.dll)中找到dll文件,并且复制到jdk安装路径的bin文件夹下(D:%你的路径%\Java\bin\)
    4.最后一步最简单啦,在java里面直接run就行啦。最后看一下结果!完美!

    在这里插入图片描述
    在这里插入图片描述
    这是windows下用java调用dll文件,接下来要实现跨平台调用,得在linux下用java可以实现改功能。头秃啊

    本文参考了这篇博客,写的特别不错。
    添加链接描述

    展开全文
  • java调用DLL文件

    2014-05-29 19:57:42
    JAVA使用JNative包调用DLL文件
  • JAVA调用DLL文件

    2020-04-09 19:44:56
    JAVA利用JNative调用DLL文件 一、需要的jar包 JNative.jar 二、需要的dll文件 需要调用的文件:myadd.dll 此dll依赖的文件:api-ms-win-crt-runtime-l1-1-0.dll、vcruntime140.dll 需要知道".h"文件中的方法,...

    JAVA利用JNative调用DLL文件

    一、需要的jar包

    	JNative.jar
    

    二、需要的dll文件

    	需要调用的文件:myadd.dll
    	此dll依赖的文件:api-ms-win-crt-runtime-l1-1-0.dll、vcruntime140.dll
    	需要知道的".h"文件中的方法,入下图:
    

    Alt

    三、java环境

    	根据dll文件配置jdk坏境,32位的dll需要配置32位jdk环境。我的是32位的。所需文件见底部。
    

    四、代码案列一

    public static void main(String[] args) {
            /**
             * 加载dll文件及依赖库的方法一
             * String path = "E:\\dll\\myadd.dll";
             * String path = "E:\\dll\\api-ms-win-crt-runtime-l1-1-0.dll";
             * String path = "E:\\dll\\vcruntime140.dll";
             * System.load(path);
             * */
            /**加载dll文件的方法二*/
            System.loadLibrary("myadd");//此方法需要将myadd.dll以及依赖的dll文件放入jdk的bin目录下
            try {
            	//param1:dll文件名 param2:方法名(上述.h文件中的方法名)
                JNative jNative = new JNative("myadd.dll", "add");
                //设置返回值类型
                jNative.setRetVal(Type.INT);
                //设置参数
                jNative.setParameter(0, Type.INT, "5");
                jNative.setParameter(1, Type.INT, "2");
                jNative.invoke();
                //获取返回值
                System.out.println(jNative.getRetVal());
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    

    五、代码案列二

    public interface CLibrary2 extends Library {
    	//需要将myadd.dll文件放入jdk的bin目录下
        CLibrary2 myadd_Operate = (CLibrary2) Native.loadLibrary("myadd", CLibrary2.class);
        int add(int a, int b);
        double add_double(double a, double b);
    }
    
    public static void main(String[] args) {
            try {
                int c = CLibrary2.myadd_Operate.add(4, 5);
                System.out.println(c);
                double v = CLibrary2.myadd_Operate.add_double(10.5, 6.3);
                System.out.println(v);
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    

    备注 (dll文件及32位jdk)

    链接:https://pan.baidu.com/s/1GMW5ziNEveLo7tb0fA0h4w 
    提取码:te96 
    

    我的码云地址: https://gitee.com/zhanghb_private

    展开全文
  • java调用dll文件,可以用 System.load() 或者 System.loadLibiary() 个人认为loadLibiary不太好,需要把dll放...

    java调用dll文件,可以用

    System.load()  或者 System.loadLibiary()

    个人认为loadLibiary不太好,需要把dll放在system32路径下,项目每个人员都要本地这样做,后期部署也需要这样弄。

    所以用的load,将dll放到resource下来读取.... 

    System.load(JNIMapUtil.class.getResource("").getPath()+("dll/DwgOperInterface.dll"));

    本机调试一直都没问题,后来打jar包运行,就访问不到了,因为jar里面的dll文件对于系统来说不是路径

    以下是解决方法:项目运行的时候,

    JNIMapUtil.class.getResourceAsStream() 读取流,然后存到系统临时表里,最后load()加载,代码如下:
    @PostConstruct
    private void initDll() throws IOException {
        //复制一份dll放到系统临时文件夹中,处理jar包,dll无法读取问题
        loadLib("DwgOperInterface");
        log.info("加载dll成功...");
    }
    
    /**
     *  复制一份dll放到系统临时文件夹中,处理jar包,dll无法读取问题(代替loadLibrary * @author sunboqiang
     * @date 2020/10/16
     */
    private synchronized static void loadLib(String libName) throws IOException {
        //BIN_LIBJAR包中存放DLL的路径
        //getResourceAsStreamJAR中根路径为开始点
        String systemType = System.getProperty("os.name");
        String libExtension = (systemType.toLowerCase().indexOf("win")!=-1) ? ".dll" : ".so";
    
        String libFullName = libName + libExtension;
    
        String nativeTempDir = System.getProperty("java.io.tmpdir");
    
        InputStream in = null;
        BufferedInputStream reader = null;
        FileOutputStream writer = null;
    
        File extractedLibFile = new File(nativeTempDir+File.separator+libFullName);
        try {
            String dllUrlInJar = "/dll/";
            in = JNIMapUtil.class.getResourceAsStream(dllUrlInJar + libFullName);
            if(in==null)
                in =  JNIMapUtil.class.getResourceAsStream(libFullName);
            JNIMapUtil.class.getResource(libFullName);
            reader = new BufferedInputStream(in);
            writer = new FileOutputStream(extractedLibFile);
    
            byte[] buffer = new byte[1024];
    
            while (reader.read(buffer) > 0){
                writer.write(buffer);
                buffer = new byte[1024];
            }
        } catch (IOException e){
            e.printStackTrace();
        } finally {
            if(in!=null)
                in.close();
            if(writer!=null)
                writer.close();
        }
        //系统价值dll文件
        System.load(extractedLibFile.toString());
    }

     

    展开全文
  • java 调用dll文件

    2019-08-24 10:20:30
    可以参考:https://blog.csdn.net/qq_36601357/article/details/81545933https://blog.csdn.net/zdy0_2004/article/details/78804840 System.load(String filename)和System.loadLibrary(String libname)的区别: ...
  • java 调用 dll 文件

    2016-11-16 16:02:21
    创建加密初始化: public class TestUmstools { private static final String ENCODING_UTF_8 = "UTF-8";...System.out.println("body加密文件result="+result.trim()); return result.trim(); } }
  • JAVA调用dll文件

    2010-08-12 17:08:34
    http://luohonghong.blog.163.com/blog/static/783120582009517253324/ http://hi.baidu.com/%B0%AE%CE%D2%B5%C4%D6%B4%D7%C5/blog/item/015a5d269a548a118b82a1c7.html
  • java 调用dll文件

    2009-02-20 16:07:03
    java 调用dll文件时 几个注意点: 1. package的使用 2. javah的使用 3.path路径的设定 下面实例介绍java调用dll中的Max函数: hello.java package 2hei.net.dll; public class hello { ...
  • java 调用dll文件总结

    2009-07-22 02:36:00
    java 调用dll文件时 几个注意点:1. package的使用 2. javah的使用 3.path路径的设定 下面实例介绍java调用dll中的Max函数: hello.java package 2hei.net.dll; public class hello{ static { //System.out....
  • windows下,java调用dll文件时,dll放在system32这个文件夹下面,那linux下,dll文件应该放在哪?
  • java调用dll文件的实例

    2012-11-20 17:53:32
    这是java采用jni技术调用dll(动态链接库的一个demo),不需要任何改动,自己可以用,很适合初学者
  • 当前位置:我的异常网» J2SE»java调用dll文件,堆栈崩溃溢出的有关问题java调用dll文件,堆栈崩溃溢出的有关问题(3)www.myexceptions.net网友分享于:2013-06-20浏览:139次thespace12800K,99%used[0x069f0000,0x...
  • import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; /** * @author setycyas * 测试jna库调用dll. * 需要的jna库:https://github.com/ja...
  • 一个用于在java调用dll动态代码库的开源组件,JNative-1.3.2
  • java调用dll文件的几种常见方式

    万次阅读 2018-02-09 16:38:36
    java调用动态库需要关注的问题: 1. 如何装载DLL文件,以及如何定位所要使用的方法; 2. 数据类型如何对应; 3. 如何给使用的方法传递参数; 4. 如何获取返回的值。一. 数据类型对应关系 Java Type C Type ...
  • 我需要对Qualitycenter二次开发做一个添加用户的功能,我用了jna方法,行不通跑了一个异常: Error looking... 我现在只有一个别人发给我dll文件,需要调用里面的方法实现功能,求大神指点一下!!!!!!!!!!!!
  • 1. 写一个java类CalculatorJni.java,定义方法,不用实现。 2. 使用javah,生成CalculatorJni.java对应的C++头文件(CalculatorJni.h)  javac -encoding utf8 ...
  • java 调用dll文件学习

    2009-12-03 18:53:00
    Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob.其中JNI(Java Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机器上调用不同的本地库。Jawin和...
  • java使用jna.Native的方式调用dll文件,报错: # Problematic frame: # C [KERNELBASE.dll+0x3a799]**** 错误日志头: # # A fatal error has been detected by the Java Runtime Environment: # # ...
  • Java通过jna-api实现最简单的跨语言调用函数,在Windows上调用DLL动态库
  • java使用jna.Native的方式调用dll文件,报错: ``` # Problematic frame: # C [MSVCR100D.dll+0x7bbbc] ``` 错误日志头: ``` # # A fatal error has been detected by the Java Runtime Environment: ...
  • 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。
  • JAVA 调用 DLL 文件 TSCLIB.DLL TSC打印机

    千次阅读 2011-11-30 17:23:12
    这是一段JAVA调用TSC条码打印机的代码;有详细的注释! 1,需要把dll文件拷贝到c:\windows\system32目录下 2,工程里面需要加载JNative.jar包(网上很多下载的)  /********************************************...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,025
精华内容 810
关键字:

java调用dll文件

java 订阅