码迷,mamicode.com
首页 > 编程语言 > 详细

JNI QuickStart,Java调用C++实现

时间:2018-10-09 15:36:42      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:edit   void   generated   编译   int   end   声明   err   bsp   

一,构建Java本地方法类,声明native方法,编译

类文件:MyTest1.java

package com.merrick.test;

class MyTest1 {
    
    public native int addnumber1(int a, int b);
    
    static{
        
        //System.
        System.loadLibrary("jnidll1");//必须省略后缀.dll
    }
    
    public static void main(String args[])
    {
        
        int res = new MyTest1().addnumber1(1234,234);
        System.out.println(res);
    }
}


编译类文件生成class文件:>javac -verbose -d . MyTest1.java

二,javap生成JNI样式的C头文件

生成头文件:>javah MyTest1

头文件:com_merrick_test_MyTest1.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_merrick_test_MyTest1 */

#ifndef _Included_com_merrick_test_MyTest1
#define _Included_com_merrick_test_MyTest1
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_merrick_test_MyTest1
 * Method:    addnumber1
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_merrick_test_MyTest1_addnumber1
  (JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

三,在VS中新建win32 dll项目

项目名称jnidll1

四,复制生成的JNI样式.h文件至win32 dll项目文件夹

 dll项目添加既有项:com_merrick_test_MyTest1.h

五,实现.h文件中的native方法

 jnidll1.cpp

// jnidll1.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"

#include "com_merrick_test_MyTest1.h"

JNIEXPORT jint JNICALL Java_com_merrick_test_MyTest1_addnumber1
(JNIEnv *env, jobject obj, jint a, jint b){
    return a+b;
};

六,生成dll:jnidll1.dll

七,在java代码中调用DLL中的native方法,测试

复制jnidll1.dll至java程序主目录

测试java调用:>java com.merrick.test.MyTest1

输出:>1468

 

JNI QuickStart,Java调用C++实现

标签:edit   void   generated   编译   int   end   声明   err   bsp   

原文地址:https://www.cnblogs.com/m160331/p/9760371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!