【如何在Java代码中调用c++c的自定义的方法】

【如何在Java代码中调用c++c的自定义的方法】,第1张

如何在Java代码中调用c++/c的自定义的方法
  • 前言
  • 创建Java调用类
  • 生成.h和.class文件
  • 编写c++代码并编译
  • Java调用c++
  • 结语

前言

最近在做一个网络udp通讯的项目时,遇到了无法转换十六进制报文的问题,思索了几天发现无法用Java实现(可能是自己能力不足)。于是便想借助c++的内存拷贝函数,在网上搜刮了半天总结出以下内容,仅供参考。

创建Java调用类
*首先创建一个Java类,创建一个native方法。
public class HelloCPlus {
      /**
     * 获取short类型的节点的值
     * @param a
     * @param b
     * @return
     */
    public native short BytesTestShort(byte a,byte b);
}
生成.h和.class文件

在之前类的路径下打开命令行输入以下指令,之后会在该路径下生成.h和.class文件

编写c++代码并编译

复制一份上面生成的.h文件副本,修改后缀为cpp就可以在里面写c++的代码了。
*记得删掉删掉文件头和尾的if end
*在代码头部添加.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
#include 
#include "com_wjs_test_HelloCPlus.h"
/* Header for class com_wjs_test_HelloCPlus */


/*
 * Class:     com_wjs_test_HelloCPlus
 * Method:    BytesTestShort
 * Signature: (BB)S
 */
JNIEXPORT jshort JNICALL Java_com_wjs_test_HelloCPlus_BytesTestShort
  (JNIEnv *, jobject, jbyte a, jbyte b){
  jshort value;
  char bytes[3];
  bytes[0] = a;
  bytes[1] = b;
  memcpy(&value,bytes,2);
  return value;
  }

编译代码需要c++环境(这个不在此过多概述,自己去官网下载配置即可),我这里是从官网下载的压缩包,解压之后即可直接使用。找不到下载地方的朋友也可以私信我要压缩包。

解压直接在里面的bin目录打开命令行,输入以下命令,命令的前半部分是为了包含jdk中的两个文件所对应的路径,中间的hello.dll为生成后文件的名称,可根据需求更改。后半段指向cpp文件的路径。回车之后什么都不显示即为成功,此时bin目录下会生成dll文件。

Java调用c++

把生成的dll文件复制出来放入到项目src同目录下。之后编写Java代码。运行即可。

public class HelloCPlus {
    //加载dll文件
    static {
        System.load(System.getProperty("user.dir") + "\hello.dll");
    }

    public static void main(String[] args) {
        HelloCPlus helloCPlus = new HelloCPlus();
        byte[] bytes = new byte[8];
        bytes[0] = (byte) 255;
        bytes[1] = (byte) 255;
        byte b1 = bytes[0];
        byte b2 = bytes[1];
        short i = helloCPlus.BytesTestShort(b1, b2);
        System.out.println(i);
     }
     public native short BytesTestShort(byte a,byte b); 
 }
结语

该文章是在上班摸鱼的时候写出来的,所以可能会有些细节上的不足,有问题的朋友可以评论或私信问我,共同学习,共同进步!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2889279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-14
下一篇 2022-09-14

发表评论

登录后才能评论

评论列表(0条)

保存