JAVA调用c/c++代码

您所在的位置:网站首页 java调用函数代码 JAVA调用c/c++代码

JAVA调用c/c++代码

2024-07-17 11:22| 来源: 网络整理| 查看: 265

  JNI是Java Native Interface的缩写,中文为JAVA本地调用。使用JNI可以很方便的用我们的Java程序调用C/C++程序。很多时候,某些功能用Java无法实现,比如说涉及到底层驱动的一些功能,这时候我们就可以利用JNI来调用C或者C++程序来实现,这就是JNI的强大之处。但是JNI也有它的缺点,使用java与本地已编译的代码交互,通常会丧失平台可移植性。

  下面是一个JNI例子,调用C++输出"hello world":

 

第一步:创建Java类,在里面定义一个本地方法(用native关键字修饰的方法)

  public native void sayHello();

第二步:使用javah命令(javah  类的全路径)生成本地方法的C++头文件

  在DOS窗口中进入工程所在目录,然后执行javah com.test.TestNative命令,执行完之后就会在当前目录生成一个后缀名为.h的头文件,如com_test_TestNative.h,这个头文件是根据包名和类名来命名的。

复制代码 1 /* DO NOT EDIT THIS FILE - it is machine generated */ 2 #include 3 /* Header for class com_test_TestNative */ 4 5 #ifndef _Included_com_test_TestNative 6 #define _Included_com_test_TestNative 7 #ifdef __cplusplus 8 extern "C" { 9 #endif 10 /* 11 * Class: com_test_TestNative 12 * Method: sayHello 13 * Signature: ()V 14 */ 15 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello 16 (JNIEnv *, jobject); 17 18 #ifdef __cplusplus 19 } 20 #endif 21 #endif 复制代码

  15、16行是对TestNative类中的本地方法sayHello()的声明。这个h文件相当于我们在java里面的接口,这里声明了一个 Java_com_test_TestNative_sayHello (JNIEnv *, jobject);方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致。

第三步:编写C/C++本地代码,生成动态链接库文件

  首先在VC6.0(当然也可以用其他工具)中创建一个dll工程---Win32 Dynamic-Link Library工程。然后将上面生成的头文件com_test_TestNative.h添加到该工程中,然后创建一个源文件引用该头文件并且实现头文件中本地函数的功能:

复制代码 1 #include 2 #include"com_test_TestNative.h" 3 4 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *env, jobject obj) 5 { 6 cout


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3