`
commissioner
  • 浏览: 23199 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JNI基本学习

 
阅读更多

Jni程序开发的一般操作步骤如下:

 

1.编写java中的调用类

2.用javah生成c/c++原生函数的头文件

3.c/c++中调用需要的其他函数功能,实现原生函数(原则上可以调用任何资源)

4 将项目依赖的所有原生库和资源加入到java项目的java.library.path

5 生成java程序

6.发布java应用和dll库

 

1、 在eclipse项目中新建一个TestHello.java,输入以下内容:

public class TestHello {



static {

System.loadLibrary("TestHello");

}



public static native void hello(String msg);



public static void main(String[] args) {



hello("Hello,Kimm!");



}



}

编译生成TestHello.class文件。

 

2. 在java工程的bin目录下:

 执行如下命令 生成TestHello.h头文件(就是jni代理stub的接口)   
javah -classpath . -jni TestHello

 

 

3.   在VC6中新建一个项目TestHello, 项目类型为Win32 Dynamic-Link Library。点击OK。

 

在弹出的窗口中选择A simple DLL project,点击Finish。

 

打开项目所在的文件目录,将步骤2中生成的TestHello.h文件复制到此目录。点击左边中间的FileView,切换到文件浏览模式。在Header Files上点击右键,选择Add Files to Folder…。

选择TestHello.h文件,点击OK。

 

打开StdAfx.h文件,再最后面添加:

 

#include <jni.h>

#include "TestHello.h"

 

 4.打开TestHello.cpp文件,在最后面添加一段代码:

JNIEXPORT void JNICALL Java_TestHello_hello(JNIEnv * env, jclass obj, jstring jMsg)

{

const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);



MessageBox( 0, strMsgPtr,"Message box from VC++ ", 0 );



env->ReleaseStringUTFChars( jMsg, strMsgPtr);



}
在VC的菜单上选择Tools-Options…,打开选项对话框。在Directories文件夹,添加上jdk所在文件夹下的include和include\win32文件夹。

 

点击VC上的菜单项Build-Build All,生成TestHello.dll。

 

4、 将VC项目Debug文件夹中的TestHello.dll复制到TestHello.class所在的文件夹下。

5、 在命令行下输入java TestHello,弹出MessageBox对话框。调用win32 api成功。

 

 备注:在编译时需要复制jdk/include下面的jawt_md.h,jni.h,jni_md.h到VC98\Include目录下。

用java:System.out.println( System.getProperty("java.library.path"))找到library路径,然后把生产的TesthHello.dll文件放在该目录下即可。

 

更多参考 http://setting.iteye.com/blog/304594

分享到:
评论

相关推荐

    JNI的学习资料

    JNI接口包括一些基本的数据类型映射(如Java的`int`对应C的`jint`),以及调用约定和异常处理方式。 在JNI中,Java对象在本地代码中表示为`JNIEnv`指针的结构体,它是一系列函数指针的集合,这些函数指针提供了访问...

    android studio 下jni学习

    本教程聚焦于在Android Studio环境下使用JNI进行学习,涵盖了基本数据类型转化、引用数据类型转化以及JSON格式数据类型的转化。 首先,我们要理解JNI的基本概念。JNI为Java程序提供了一个接口,通过这个接口,Java...

    Android JNI基本示例

    Android JNI(Java Native Interface)是Java...通过学习和理解这个资源,开发者可以掌握JNI的基本用法,进一步提升Android应用的性能和功能。在实际项目中,务必注意内存管理和线程安全,以确保应用的稳定性和效率。

    第一个JNI实例学习

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

    android JNI学习三实例

    总结,通过"android JNI学习三实例",我们可以掌握JNI的基本使用,理解如何在Android应用中集成C/C++代码,以及如何利用JNI进行跨语言交互,从而提高应用的性能和功能。实践中,我们需要结合具体的项目需求和性能...

    JNI学习二:字符串参数传递与返回值

    1. **JNI基本概念** JNI是Java平台提供的一个接口,它使得开发者可以编写本地方法(用C或C++编写),这些本地方法可以在Java应用程序中被调用。JNI提供了一套API,通过这些API,Java代码能够调用C/C++代码,反之...

    Android JNI 部分学习Demo

    本示例"Android JNI 部分学习Demo"提供了一个基础的Java调用C代码的例子,帮助开发者了解和掌握JNI的基本使用。 首先,我们需要理解JNI的基本结构。在Android项目中,JNI通常包含以下部分: 1. **Java源文件**:这...

    JNI学习笔记.doc

    #### 二、JNI基本原理 JNI的主要作用是充当Java与本地代码之间的桥梁。它通过提供一套API(Application Programming Interface),使Java应用能够与本地代码进行交互。这一机制对于以下几种情况非常有用: 1. **...

    JNI学习笔记

    本学习笔记涵盖了使用Android Studio开发JNI应用的基础步骤,适合初学者学习入门。 ### 环境配置 在进行JNI开发之前,需要确保Java开发环境配置正确。主要包括以下几个步骤: 1. **安装NDK**:NDK(Native ...

    java与c++交互(JNI学习笔记)

    ### Java与C++交互(JNI学习笔记) #### 一、Java类型与C/C++类型对应关系 在Java Native Interface (JNI) 中,Java 和 C/C++ 的数据类型有着明确的对应关系。理解这些对应关系是实现Java与C++交互的基础。 - **...

    NDK编程JNI基本操作编程入门教案

    本教程将带你步入NDK编程和JNI基本操作的殿堂,帮助你掌握编程入门所需的关键知识。 1. NDK介绍: NDK是一组工具集,包含了编译器、链接器和其他工具,用于在Android平台上构建原生库。通过NDK,开发者可以创建C或...

    jni学习例子 在linux下执行成功

    1. **JNI基本概念**:JNI是一种接口,使得Java代码能够调用本地方法(用C、C++等编写),同时也允许本地代码调用Java方法。这通常用于利用Java的跨平台特性,同时利用C/C++的高性能和系统级功能。 2. **Java到C的...

    JNI CHM文档以及JNI编程规范

    在“JNI CHM文档”中,可能包含了JNI的基本概念、结构、API使用方法以及一些实例解析。CHM文件以索引方式组织内容,便于快速查找和学习。你可以通过点击目录或使用搜索功能来查找特定的知识点。 JNI编程规范是...

    jni教程实例手把手

    1. **Android_JNI总结.doc**:这份文档可能是对Android平台上JNI应用的总结,涵盖了JNI的基本概念、环境设置、头文件生成、本地方法定义、本地函数实现以及在Android Studio中的配置步骤。通过阅读,学习者可以了解...

    JNI基本知识共3页.pdf.zip

    学习和掌握JNI,可以帮助开发者充分利用本地代码的优势,提高Java应用的性能和功能。但同时,JNI也会增加代码的复杂性,因此在选择使用JNI时需要权衡利弊。在实际开发中,通常在以下场景下考虑使用JNI:性能关键的...

    jni02基本知识

    这个“jni02基本知识”的资料很可能是关于JNI的进阶学习内容,涵盖了比基础更深入的用法和技术。 JNI的核心概念主要包括以下几个方面: 1. **本地方法接口(Native Method Interface)**:JNI定义了一套接口和数据...

    android_JNI学习六

    "android_JNI学习六"可能是一个关于深入理解和实践JNI技术的教程或项目,涵盖了JNI的基本概念、使用方法以及实际应用。 1. **JNI基础知识**:JNI是Java平台的一部分,为Java应用程序提供了一种方式来调用本地(非...

    JNI学习三-简单类型数组访问

    首先,让我们了解JNI的基本结构。一个JNI程序通常包含两部分:Java源代码和本地源代码。Java源代码中定义了native方法,这些方法将在本地源代码(C/C++)中实现。JNI头文件`jni.h`提供了在本地代码中操作Java对象和...

Global site tag (gtag.js) - Google Analytics