jni 学习笔记(java调用c++)

package com.native;

public class MyNative {


public native static void set( int num );
public native static int get();

}

javac 指令

javac G:\Job\android\wrok\Native\src\com\native

javah 指令

set classpath=G:\Job\android\wrok\Native\src

javah -jni com.native.MyNative

 生成.dll文件

用vs创建一个win32 项目进入win32应用程序向导界面 点击下一步选择应用程序类型:dll 点击完成,

将生成的.h(com_native_MyNative)文件copy到创建的vs项目中,新建一个.cpp(MyNative.cpp)文件将com_native_MyNative.h中的方法实现最后编译项目生成项目.dll文件。

package com.native;

public class Main {
public static void main( String args[] ){
System.loadLibrary( "MyNative" );
com.native.MyNative a = new com.native.MyNative();
int i = 99;
a.set(i);
System.out.println( "set value: " + i );
System.out.println( "get value: " + a.get() );
}
}


com_native_MyNative.h

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


#ifndef _Included_com_native_MyNative
#define _Included_com_native_MyNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_native_MyNative
 * Method:    set
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_native_MyNative_set
  (JNIEnv *, jclass, jint);


/*
 * Class:     com_native_MyNative
 * Method:    get
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_native_MyNative_get
  (JNIEnv *, jclass);


#ifdef __cplusplus
}
#endif
#endif



MyNative.cpp

#include"com_native_MyNative.h"
int i;
JNIEXPORT void JNICALL Java_com_native_MyNative_set
  (JNIEnv *, jclass, jint j)
{
i = j;
printf("set ok!\n");
}


JNIEXPORT jint JNICALL Java_com_native_MyNative_get
  (JNIEnv *, jclass)
{
printf( "java 调用C++" );
return i;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JNIJava Native Interface)是一种技术,它可以让Java程序与C(或C++)程序进行互相调用。 在JNI中,我们可以使用Java的native关键字声明一个方法,该方法的具体实现在C(或C++)语言中完成。然后,我们可以通过JNI提供的接口函数,在Java和C(或C++)之间进行数据和方法的递。 在Java代码中,我们首先需要使用System.loadLibrary()方法加载C(或C++)动态链接库。然后,通过Java的native方法调用C(或C++)中的函数,实现Java与C(或C++)的互相调用。 在C(或C++)代码中,我们需要编写与Java声明的native方法对应的具体实现代码。可以使用JNI提供的接口函数,通过JNIEnv结构体来访问Java的对象、方法和属性。 Java与C(或C++)之间的数据递可以通过JNI提供的接口函数来完成。我们可以使用JNI的函数将Java的基本数据类型与C(或C++)的对应类型进行转换,例如将int转换为jint、jint转换为int等等。同时,我们也可以使用JNI函数来处理复杂的数据结构,例如将Java的字符串转换为C(或C++)的字符串,或将Java的数组转换为C(或C++)中的数组。 在实际应用中,JNI可以用于优化性能,因为C(或C++)代码相对于Java代码可以更高效地执行某些操作。同时,JNI也可以用于与现有的C(或C++)库进行集成,以利用已有的功能。 总之,JNI提供了一种机制,可以在Java和C(或C++)之间实现互相调用,使得我们可以充分利用两者各自的优势,在应用开发中更加灵活和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值