JNI允许运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,允许将Java虚拟机直接嵌入到本地的应用程序中。
环境搭建
1、安装jdk及配置环境配置
2、配置vc++ 6.0
编写java代码:
package org.nickfover.jni; public class Demo { public static int COUNT = 4; private String msg; private int[] counts; public Demo(){ this("缺省的构造方法"); } public Demo(String s){ this.msg = s; } public String getMessage(){ return msg; } public static String getHelloworld(){ return "Hello world!!"; } public String append(String str,int i){ return str + i; } public int[] getCounts(){ return counts; } public void setCounts(int[] counts) { this.counts = counts; } public void throwExcp()throws IllegalAccessException { throw new IllegalAccessException("execption occur."); } }
编译(注:用eclipse编写的出现编译错误,我把复制出来粘贴在文档文件中,可能是编码的问题)
之后用javap命令查看(javap是jdk自带的反编译软件):
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javac Demo.java
E:\ECLIPSEWORKPALCE\JNI\src\org\nickfover\jni>javap -s -p Demo
Warning: Binary file Demo contains org.nickfover.jni.Demo Compiled from "Demo.java" public class org.nickfover.jni.Demo { public static int COUNT; Signature: I //这个是指对象在内存中的类型表示,在java模块的类加载哪章有见解 private java.lang.String msg; Signature: Ljava/lang/String; private int[] counts; Signature: [I public org.nickfover.jni.Demo(); Signature: ()V //()V表示void,括弧内表示参数 public org.nickfover.jni.Demo(java.lang.String); Signature: (Ljava/lang/String;)V //L表示String public java.lang.String getMessage(); Signature: ()Ljava/lang/String; //()L表示返回String型 public static java.lang.String getHelloworld(); Signature: ()Ljava/lang/String; public java.lang.String append(java.lang.String, int); Signature: (Ljava/lang/String;I)Ljava/lang/String; public int[] getCounts(); Signature: ()[I public void setCounts(int[]); Signature: ([I)V public void throwExcp() throws java.lang.IllegalAccessException; Signature: ()V static {}; Signature: ()V }
参考:http://public0821.iteye.com/blog/423941
相关推荐
《C/C++调用Java方法详解》 C/C++与Java之间的交互,主要依赖于Java Native Interface(JNI)技术。自Java 1.1以来,JNI已成为Java平台不可或缺的一部分,它提供了一种机制,使Java代码能够调用本地(非Java)代码...
在`C++调用JAVA方法详解.txt`中,可能详细解释了如何编写这些JNI函数,包括如何定义`JNIEXPORT`和`JNIEnv *`,以及如何处理Java对象和C++对象之间的转换。例如,`JNIEXPORT`是一个修饰符,指示函数是JNI接口的一部分...
通过以上详细的步骤和技术要点,我们可以看到,无论是Java调用C/C++还是C/C++调用Java,都需要仔细地处理数据类型转换、异常处理以及性能优化等问题。掌握这些技术细节,对于开发高效稳定的跨语言应用程序至关重要。
### C++调用Java方法详解 #### 一、概述 在跨语言编程中,C++与Java之间的相互调用是一个常见的需求。本文旨在详细介绍如何利用Java Native Interface (JNI)技术来实现C++对Java方法的调用。JNI是Java平台的一部分...
4. **在C++中调用Java方法**:在QT项目的C++代码中,包含生成的JNI头文件,并使用QAndroidJniObject调用Java方法。下面是一个简单的例子: ```cpp #include #include #include "MyJavaClass.h" void ...
C++调用C#、Java方法详解 在这篇文章中,我们将探讨如何使用C++调用C#和Java语言的方法。虽然C++是一种非常强大的语言,但是在调用其他语言方面的介绍却很少见。通过这篇文章,我们将展示如何使用C++调用C#和Java...
其中,C++调用Java类的主要途径是通过Java Native Interface (JNI)来实现。 #### JNI简介 JNI(Java Native Interface)是一种标准,用于定义Java应用程序如何与用其他语言编写的本地代码进行交互。它的设计目标是...
在C/C++中调用Java代码,主要...总的来说,C/C++调用Java的核心在于理解和正确使用JNI接口,确保Java和C/C++之间的数据转换正确,以及正确地管理JVM生命周期。这不仅涉及到技术实现,也涉及到了跨语言编程的最佳实践。
标题中的"C调用Java详解和源代码"涉及的是一个跨语言编程的话题,即如何通过C或C++程序来调用Java编写的功能。这种技术主要基于Java Native Interface(JNI),它是Java平台标准版的一部分,用于创建混合(本地和...
- 特别注意,对于C++调用Java的情况,需要确保JVM的相关库文件能够被找到。 #### 4. 示例代码分析 - **Java调用C++** - Java代码示例中的`WinFile.java`中声明了一个`native`方法`GetFilesFromDir`。 - 使用`...
- **C++调用Java**:C++代码需要通过JNI启动Java虚拟机(JVM),并通过JNI调用Java方法。 #### 环境配置 本教程基于以下环境: - Java版本:1.6.0_03-b05 - C++版本:VC++6.0 确保正确设置了环境变量,包括Java的...
### Java调用C和C++的关键技术:JNI详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程已成为一种趋势。Java作为一种广泛使用的编程语言,因其平台无关性而受到开发者的青睐。然而,Java为了保持其跨平台...
标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...
### Java调用C/C++全过程详解 #### 一、引言 随着软件开发技术的不断发展,跨平台的应用程序越来越受到开发者的青睐。Java作为一种典型的跨平台编程语言,因其一次编写到处运行的特点而广受欢迎。然而,Java作为一...
3. **C++调用Java方法**:在C++代码中,首先需要初始化JVM,并获取JNIEnv指针。然后,使用JNIEnv提供的API来查找并调用`WinFile.getGreeting()`方法。 #### 六、总结 本文详细介绍了如何实现C++与Java的混合编程,...
- **实现Java调用:** 在`COMTest_Start`类中实现调用C++ DLL的方法。 **技术要点:** - 需要注意C#和Java中的数据类型转换问题,特别是字符串类型的处理。 - 确保C++项目启用了CLR支持。 - JNA的配置与使用。 ##...
**NDK_C调用Java Demo详解** 在移动应用开发中,Android NDK(Native Development Kit)允许开发者使用C和C++编写部分代码,以提高性能或利用现有的C/C++库。有时,我们可能需要在NDK编写的原生代码中调用Java层的...
最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用C++的例子网上很多,以一个C++的具体方法为例。 C++代码 // 获取一帧图像数据 ...