首页 > 编程语言 >java调用c++的几种方式

java调用c++的几种方式

时间:2023-02-28 10:35:18浏览次数:40  
标签:调用 java c++ public jna API JNATest JNATEST

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++,public,jna,API,JNATest,JNATEST
From: https://www.cnblogs.com/q-q56731526/p/17163076.html

相关文章

  • Java学习笔记12
    正则表达式1.概述​ 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字......
  • KingbaseES libstdc++.so.6 version 'CXXABI_1.3.8'问题处理
    概述initdb报错如下:“ERROR:libstdc++.so.6:version:'CXXABI_1.3.8'notfound(requiredby...)”此文是以CentOSLinux7(AltArch)操作系统为例,编译安装高版本GC......
  • 基础Java学习笔记(一)
    学习笔记01两年前学的Java,现在已经忘得差不多了,跟着狂神说Java的视频从头开始学,希望能救一救ww一、JDKJREJVM1.JDKjavadevelopmentkit2.JREjavaRuntimeEnvir......
  • java网络编程-并发服务端
    上次的服务端一次只能接受一个客户端的连接,性能实在堪忧,我们对服务端进行了改造,每接到一个客户端的请求,就新建一个线程,让新线程跟客户端进行交互,主线程可以继续等待其他客......
  • java面试题-列举常见的异常
    面试中经常会被问到,列举几种常见异常。怎么能被这个难倒呢?下面随便列举些,以及触发例子。文章目录​​NullPointerException​​​​ArithmeticException​​​​NumberFor......
  • java使用gzip压缩和解压
    代码如下:publicclassGZipUtils{publicstaticfinalintBUFFER=1024;publicstaticfinalStringEXT=".gz";publicstaticvoidmain(String[]args)......
  • java使用commons-lang3
    pom.xml中添加<!--https://mvnrepository.com/artifact/org.apache.commons/commons-lang3--><dependency><groupId>org.apache.commons</groupId><artifactId>co......
  • java常用系统属性System.getProperties().getProperty()
    用法例子:System.out.println(System.getProperties().getProperty("user.home"));常用属性列表:属性含义java.versionJava运行时环境版本java.vendorJava运行时环境供应商jav......
  • java8 flatmap的使用
    Useruser=newUser(“anna@gmail.com”,“1234”);user.setPosition(“Developer”);Stringposition=Optional.ofNullable(user).flatMap(u->u.getPosition()).......
  • java中输出方框(未知字符)
    这说明是空白字符,注意不是空字符串,也不是null。他是unicode中的\u0000也就是NULL.哪些场景会出现该情况?char数组中有未设定的字符,会当做空白字符来打印publicstaticvo......