`
侯上校
  • 浏览: 223403 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA JNI 实例--HelloWorld

    博客分类:
  • JAVA
阅读更多
JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能。使用JAVA JNI接口主要包括以下步骤:
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
本文使用一个简单的helloWorld示例演示JNI的使用。

(1)编写JAVA代码
public class helloWorld
{
    public native void SayHello(String name);

    static
    {
        System.loadLibrary("examdll");
    }

    public static void main(String [] argv)
    {
        helloWorld hello = new helloWorld();
        hello.SayHello("myName");
    }
}

(2)编译JAVA代码

javac helloWorld.java

(3)生成实现函数头文件

javah -classpath . helloWorld

得到的文件内容如下:

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

#ifndef _Included_helloWorld
#define _Included_helloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     helloWorld
* Method:    SayHello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_helloWorld_SayHello
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

(4)在VC中实现上述函数

#include "helloWorld.h"
#include <stdio.h>
#include <string.h>
void JNICALL Java_helloWorld_SayHello(JNIEnv * env, jobject obj, jstring str)
{
    jboolean  b  = true;
    char s[80];
    memset(s, 0, sizeof(s));
    strcpy_s(s ,(char*)env->GetStringUTFChars(str, &b));
    printf("Hello, %s", s);
    env->ReleaseStringUTFChars(str , NULL);
}

  这是JNI的关键:通过env我们可以使用JAVA提供的一组函数操作与转换函数传递的参数。

(5)编译VC项目得到动态连接库 examdll.dll。
分享到:
评论

相关推荐

    jni-helloWorld

    总的来说,"jni-helloWorld"是一个非常适合初学者了解JNI基本用法的实例,通过它,开发者可以学习到如何在Java程序中嵌入本地代码,实现Java与本地代码的高效交互。而提供的错误处理和解决方案则有助于在实践中解决...

    Java再说JNI之实例

    JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jobject thisObj) { printf("Hello, World from C++!\n"); } ``` `JNIEXPORT`和`JNICALL`是JNI定义的宏,用于指定导出函数的返回类型和调用约定...

    Java jni调用c实例

    JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jobject obj) { printf("Hello from C++!\n"); } ``` 这里,`JNIEXPORT`和` JNICALL`是JNI约定的宏,用于正确导出和导入函数。`JNIEnv*`是一个指向...

    第一个JNI实例学习

    在这个"第一个JNI实例学习"中,我们将探讨如何创建并运行一个基本的JNI程序。 首先,我们需要理解JNI的核心概念。JNI提供了一套接口,让Java代码能够声明本地方法,这些方法在运行时由本地(非Java)代码实现。本地...

    JNI-Java Native Interface资料(精华)

    #### HelloWorld示例 一个经典的入门示例是通过JNI实现的“Hello World”。这通常涉及在C或C++中编写本地方法,然后在Java中调用该方法来打印消息。此示例展示了如何声明本地方法,如何在本地代码中实现它,以及...

    Windows下JNI初学实例

    1. **HelloWorld.java** - 这是我们的Java源代码,它包含了JNI函数的声明和Java方法调用。 2. **HelloWorld.h** - JNI头文件,由Java编译器生成,包含了C/C++的函数原型。 3. **HelloWorld.cpp** - C/C++源代码,...

    Java调用C程序之HelloWorld

    `Java_HelloWorld_sayHello`是Java方法名的JNI格式,`JNIEnv *env`和`jobject thisObj`是JNI接口指针和对象实例。 2. **构建本地库**: 使用C编译器(如gcc)编译`HelloWorld.c`生成动态链接库(如在Linux上为`.so...

    JNI调用C++的应用实例

    2. **生成头文件**:使用`javac HelloWorld.java`和`javah -jni HelloWorld`生成`HelloWorld.h`。 3. **实现C/C++代码**:编写`HelloWorld.cpp`,并实现`setMsg`和`getMsg`方法。这两个方法需要与Java的类型对应,...

    JNI java本地接口实例

    总结来说,JNI实例通常包含以下步骤: 1. 在Java类中声明native方法。 2. 使用`System.loadLibrary()`加载本地库。 3. 创建C++源文件,实现对应的native方法。 4. 编译C++代码为本地库。 5. 运行Java程序,调用JNI...

    visual studio 2019下C++通过JNI调用JAVA代码

    如果你是在Java环境中测试,可以创建一个Java主程序,实例化`HelloWorld`类并调用`printMessage()`。如果在C++中运行,可能需要通过JNI的`AttachCurrentThread`等函数手动管理Java虚拟机(JVM)的生命周期。 总的来...

    JNI经典教程-开发必备6.pdf

    public class HelloWorld { public static void sayHello() { System.out.println("Hello from Java!"); } } ``` 在C/C++代码中,可以通过以下方式调用这个方法: ```c #include &lt;jni.h&gt; int main() { JavaVM...

    JNI技术手册 c/c++调用java

    生成的`HelloWorld.h`文件包含了JNI接口的定义。 - **用C/C++实现头文件:** ```c #include &lt;jni.h&gt; #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv *env, jobject obj) ...

    jni的简单入门实例

    首先,我们需要编写一个简单的Java类`HelloWorld.java`。这个类中包含了一个本地方法`myPrint()`,这个方法将在C/C++代码中实现。 ```java public class HelloWorld { static { System.loadLibrary("HelloWorld")...

    Eclipse + vs2013 编写第一个JNI HelloWorld

    通过这个简单的JNI HelloWorld示例,你可以了解到Java与本地代码交互的基本步骤。实际开发中,JNI可以用来实现性能敏感的部分,访问操作系统API,或者整合其他已有的C/C++库。理解并熟练掌握JNI,对Java开发者来说是...

    JNI Helloworld

    在"JNI HelloWorld"这个主题中,我们主要讨论的是如何通过JNI技术在Java程序中调用C语言编写的函数,实现Java与本地代码的无缝集成。 1. **JNI简介** JNI是一种接口,为Java虚拟机(JVM)提供了与本地代码(如C/...

    Android.JNI - NDKHelloWorld

    本教程将深入探讨如何使用JNI和NDK(Native Development Kit)来创建一个简单的“Hello, World!”程序。 首先,我们需要理解NDK是什么。NDK是Google提供的一套工具,用于在Android平台上编译和运行C/C++代码。它...

    关于JNI的小例子 实现java与C++的方法互调

    接下来,在项目的`jni`目录下创建一个名为`HelloWorld_jni.cpp`的C++文件,这里我们将实现Java层声明的native方法。在Android Studio中,这个目录默认位于`app/src/main/jni`。 在`HelloWorld_jni.cpp`中,我们需要...

    Android jni 实例

    总结来说,Android JNI实例主要涉及以下几个关键点: 1. 在Java层声明native方法。 2. 使用`javah`或Android Studio生成头文件。 3. 编写C/C++代码实现头文件中的方法。 4. 配置CMake或NDK构建系统生成.so库文件。 5...

    adt-bundle JNI NDK 初学者实例

    在提供的压缩包`myJni`中,很可能包含了一个简单的JNI实例,比如一个简单的"Hello, World!"程序,或者是演示如何从Java调用C++函数的例子。通过学习这个实例,初学者可以更好地理解如何在Android应用中集成本地代码...

Global site tag (gtag.js) - Google Analytics