JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟机直接嵌入到本地的应用程序中。
环境搭建
1、安装jdk及配置环境配置
2、配置vc++ 6.0
编写java代码:
package org.nickfover.jni; public class Demo { public static int COUNT = 4; private String msg; private int[] counts; public Demo(){ this("缺省的构造方法"); } public Demo(String s){ this.msg = s; } public String getMessage(){ return msg; } public static String getHelloworld(){ return "Hello world!!"; } public String append(String str,int i){ return str + i; } public int[] getCounts(){ return counts; } public void setCounts(int[] counts) { this.counts = counts; } public void throwExcp()throws IllegalAccessException { throw new IllegalAccessException("execption occur."); } }
编译(注:用eclipse编写的出现编译错误,我把复制出来粘贴在文档文件中,可能是编码的问题)
之后用javap命令查看(javap是jdk自带的反编译软件):
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javac Demo.java
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javap -s -p Demo
Warning: Binary file Demo contains org.nickfover.jni.Demo Compiled from "Demo.java" public class org.nickfover.jni.Demo { public static int COUNT; Signature: I //这个是指对象在内存中的类型表示,在java模块的类加载哪章有见解 private java.lang.String msg; Signature: Ljava/lang/String; private int[] counts; Signature: [I public org.nickfover.jni.Demo(); Signature: ()V //()V表示void,括弧内表示参数 public org.nickfover.jni.Demo(java.lang.String); Signature: (Ljava/lang/String;)V //L表示String public java.lang.String getMessage(); Signature: ()Ljava/lang/String; //()L表示返回String型 public static java.lang.String getHelloworld(); Signature: ()Ljava/lang/String; public java.lang.String append(java.lang.String, int); Signature: (Ljava/lang/String;I)Ljava/lang/String; public int[] getCounts(); Signature: ()[I public void setCounts(int[]); Signature: ([I)V public void throwExcp() throws java.lang.IllegalAccessException; Signature: ()V static {}; Signature: ()V }
参考:http://public0821.iteye.com/blog/423941
相关推荐
从 C/C++ 中调用 Java 代码,有一下几个步骤: 1.创建 JVM。调用 JNI_CreateJavaVM()。 2.寻找要调用的类。调用 FindClass()。 3.找到要调用的方法。调用 GetStaticMethodID()/GetMethodID()。 4.运行方法。...
C调用java程序详解和源代码,前一阵子,趁有机会了解了JNI的一些东西,并按我的方法对JNI做了些封装,我就可以在C++ 中调用一些java写的功能了
最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用C++的例子网上很多,以一个C++的具体方法为例。 C++代码 // 获取一帧图像数据 ...
本文旨在简单的介绍一下如何让java层和C/C++层相互调用,这里主要是使用了JNI技术,并没有深究其原理,只是做了个实现,其目的是为后面的学习打开一扇窗。
栈: 在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是...
主要为大家详细介绍了Java调用外接设备的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI是JVM规范的一部分,因此可以将我们写的JNI的程序在任何实现了JNI规范的Java虚拟机中运行。同时,这个特性使我们可以复用以前用C/...
Android调用C++接口调用技术Java Native Interface(JNI)详解,
JNI技术详解,帮你快速掌握Java调用C/C++的JNI技术。
对于大部分应用开发者来说可能都不怎么接触到NDK,但如果涉及到硬件操作的话就不得不使用NDK...使用NDK还有另一个原因,就是C/C++的效率比较高,因此我们可以把一些耗时的操作放在NDK中实现。所以NDK主要做驱动的开发。
在C++或Java里,类与类的行为方法之间的关系非常紧密,一个方法必定属于一个类,且于编译时就已经绑定在一起,所以你不可能调用一个类里没有的方法。而在Objective-C中就比较简单了,类和消息之间是松耦合
3.1.1 从c++到java(一) 46 3.1.2 从c++到java(二) 47 3.2 常用技术 49 3.2.1 如何新建和使用控件 49 3.2.2 使用定时器Timer及消息处理 51 3.2.3 操作调试数据库与ContentProvider详解 53 3.2.4 电源管理 56 ...
当前的google protocol buffer仅支持:C++,Java,Python。PHP作为WEB开发的主力居然没有得到google protocol buffer的官方支持实在是有一些遗憾。 目前PHP支持google protocol buffer的开源实现包括pb4php、phpbuf...
C#语言的方法重载与C++、java基本是一样的,但是C#还包含C++的运算符重载,java里面没有这个概念。 第二种:运行时的多态性,是在系统运行时,调用一个名字相同,参数类型也相同以及个数也完全一样的方法,但会完成...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
最最基本的就是 __init__ 方法,相当于 C++ / Java 的构造函数。带双下划线 __ 的方法都是特殊方法,除了 __init__ 还有很多,后面会有介绍。 参数 self 相当于 C++ 的 this,表示当前实例,所有方法都有这个参数,...
YOLOv8目标检测源码.rar
适合对JNI尚不了解的开发者。介绍如何在Android环境下使用JNI已达到java与C/C++函数互调,描述如何在VM中调用C/C++函数。
office插件 支持接入 word excel 操作 ,支持TC 易语言 , c++ java 接入操作 ,需放在线程中执行