java调用c++的几种方式
jni
类似c#调用c++的方式,定义java端的c++代码接口。
package crayon.jni;
public class JNITest {
public native static void set(int i);
public native static int get();
static{
System.loadLibrary("JNITest");
}
}
jna
jna是jni的封装,可以直接写c++代码(导入java的c头文件),再通过java调用,jna没有jni效率高。
#ifdef JNATEST_EXPORTS
#define JNATEST_API __declspec(dllexport)
#else
#define JNATEST_API __declspec(dllimport)
#endif extern "C" {
JNATEST_API void set(long l);
JNATEST_API long get();
}
#include "stdafx.h"
#include "JNATest.h" long tmp;
JNATEST_API void set(long l){
tmp = l;
}
JNATEST_API long get(){
return tmp;
}
import com.sun.jna.Library;
import com.sun.jna.Native; public interface JNATest extends Library {
JNATest INSTANCE = (JNATest) Native.loadLibrary(
"D:/CC/Tools_Tool_ITT_StdPrj_Dev/PF_Tools_VOB/Tools_SubTool/src/JNATest/Release/JNATest", JNATest.class);
public void set(int i);
public int get(); }
jnative
jnative也是基于jni的封装,jnative可以不定义任何函数,通过反射的方式调用c++函数
JNative native = new JNative(“a.dll”,“get_value”);
java调用c++的几种方式的更多相关文章
- Java中创建对象的几种方式
Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
- Java调用第三方http接口的方式
1. 概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适.很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信.天气等). 在J ...
- Java中创建对象的五种方式
我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...
- 【转】Java中创建对象的5种方式
Java中创建对象的5种方式 作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...
- Java创建线程的四种方式
Java创建线程的四种方式 1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run方法,run()方法的内容就是该线程执行的内容 创建Thread子类的实例,即创建了线程对象. ...
- 如何实现有返回值的多线程 JAVA多线程实现的三种方式
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable ...
- java产生随机数的几种方式
java产生随机数的几种方式 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他 ...
- Java读写文件的几种方式
自工作以后好久没有整理Java的基础知识了.趁有时间,整理一下Java文件操作的几种方式.无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外.Java读写文件一般是通过字节.字符和行 ...
- Java添加事件的四种方式
Java添加事件的几种方式(转载了codebrother的文章,做了稍微的改动) /** * Java事件监听处理——自身类实现ActionListener接口,作为事件监听器 * * @author ...
随机推荐
- SpringBoot启动流程简要分析
声明 源码基于Spring Boot 2.3.12.RELEASE 背景 此文的目的主要想弄明白为什么在Spring Boot中注册Servlet.Filter.Listener组件时需要加上@Ser ...
- 学习-自增id++的问题
代码示例: let id = 0 const todos = ref([ { id: id++, text: 'Learn HTML' }, { id: id++, text: 'Lear ...
- Android移动端性能测试工具mobileperf
简介:mobileperf是阿里开源的一个python PC 工具,可以收集Android性能数据: cpu.内存.流畅度.fps.logcat日志.流量.进程线程数.进程启动日志,mobileper ...
- linux系统:共享库问题之如version `ZLIB_1.2.9‘ not found
1. 错误提示: Gtk-WARNING **: Error loading image 'file:///usr/share/themes/Ambiance/gtk-3.0/assets/butto ...
- CAD中相交线怎样打断?CAD打断相交线步骤
在CAD设计过程中,如果想要打断图纸中相交线该如何操作呢?大家第一个想到的是不是CAD打断命令?没错,CAD打断命令是可以实现的,但是过于麻烦,今天小编来给大家分享一个更简单的方法,那就是浩辰CAD软 ...
- Double NaN
import java.math.BigDecimal; import java.math.RoundingMode; public class Test { public static void m ...
- esxi虚拟机定时创建快照
1.vim-cmd vmsvc/getallvms 列出所有虚拟机信息 2.获取需要备份的虚拟机的Vmid 3.执行快照 vim-cmd vmsvc/snapshot.create Vmid $( ...
- 【小记】如果 golang 内存不够了怎么办
在看 redis 1.0 源码时,总会看到需要申请内存的地方,如果申请不到需要大的内存就会返回 NULL,然后在调用层抛出 oom. 比如 listDup 中在复制特殊 value 或者加入新节点时都 ...
- PHP 8 Apache 2.4
PHP 8 一.下载 官网:PHP For Windows: Binaries and sources Releases 切记要下载Thread Safe版本,不然后面不能够连接Apache服务 ...
- TinyRadius客户端java登录认证
jar包:TinyRadius-1.0.jar 依赖:commons-logging.jar radius配置文件: <?xml version="1.0" encoding ...