1.创建一个类com.test.TestCall内容如下 package com.test;
public class TestCall {
public native String getResponse(String request);//传说中的native,调用非java方法
}
2.编译得到TestCall.class文件
命令javah com.test.TestCall(如果不好使,前面执行一句set classpath=.)
得到com_test_TestCall.h文件,内容如下 /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_TestCall */
#ifndef _Included_com_test_TestCall
#define _Included_com_test_TestCall
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_TestCall
* Method: getResponse
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
3.新建C/C++工程,引入com_test_TestCall.h头文件 TestCall.cpp
#include "com_test_TestCall.h"
JNIEXPORT jstring JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *pEnv, jobject obj, jstring jstr)
{
jstring response = pEnv->NewStringUTF("call C:");
jboolean isCpoy;
const jchar *request = pEnv->GetStringChars(jstr,&isCpoy) ;
//todo
pEnv->ReleaseStringChars(jstr,request);
return response;
}
编译成TestCall.dll
4.将TestCall.dll放到eclipse工程下(或者运行参数java -Djava.library.path=“dll目录”)
完整TestCall.java package com.test;
public class TestCall {
static
{
//dll名字
System.loadLibrary("TestCall");
}
public native String getResponse(String request);
public static void main(String[] args)
{
TestCall call = new TestCall();
String message = call.getResponse("hello");
javax.swing.JOptionPane.showMessageDialog(null, message);
}
}
5.运行java,弹出对话框就算成功了。
当然现在有Java Native Access这个开源项目,方便了我们的调用。
JNA里面不需要按照com_test_XX这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用
相关推荐
### Java调用C/C++全过程详解 #### 一、引言 随着软件开发技术的不断发展,跨平台的应用程序越来越受到开发者的青睐。Java作为一种典型的跨平台编程语言,因其一次编写到处运行的特点而广受欢迎。然而,Java作为一...
通过以上详细的步骤和技术要点,我们可以看到,无论是Java调用C/C++还是C/C++调用Java,都需要仔细地处理数据类型转换、异常处理以及性能优化等问题。掌握这些技术细节,对于开发高效稳定的跨语言应用程序至关重要。
JNI允许Java代码和其他语言写的代码进行交互,包括调用C/C++编译的动态链接库(DLL)文件。下面将详细介绍如何使用JNI来调用DLL,并解释相关知识点。 1. **JNI简介** JNI是Java平台的标准部分,提供了一组接口,...
- JNI定义了一套函数,使得C/C++可以创建Java对象,调用Java方法,处理异常等。 3. **C++代码调用Java jar**: - 在C++工程(例如使用Visual Studio 2013)中,需要包含jni.h头文件,并且链接到Java的本地库。 -...
标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java Native Interface(JNI)上,这是一种允许Java代码与其他编程语言(如C++或C#)进行交互的标准机制。下面我们将深入探讨这一主题。 首先,JNI是Java平台的...
Java调用C/C++的过程,通常被称为JNI(Java Native Interface),是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。对于那些需要利用C或C++的高性能特性的Java开发者来说,JNI是一个重要的工具。...
- **调用函数**:现在,你可以像调用Java方法一样调用本地库函数。 4. **示例** ```java public interface MyDLL extends Library { // 假设我们有这样一个C函数声明:int add(int a, int b); int add(int a, ...
在Android开发中,有时我们需要利用C或C++的高性能特性,比如处理图形计算、音频处理等,这时就需要在Java和C/C++之间进行交叉调用。Android Studio支持这种跨语言调用,主要通过Android Native Development Kit ...
接下来,`BridgeWinJava.zip`可能包含了一个Windows平台下的Java调用C++的示例项目。这个项目可能包括: 1. **Windows特定的JNI实现**:可能涉及到Windows API的使用,如动态库加载函数LoadLibrary和GetProcAddress...
在C/C++中调用Java代码,主要依赖于Java Native Interface (JNI),这是一个允许Java代码与本地代码交互的标准接口。JNI使得开发者可以将C/C++的高性能代码集成到Java应用程序中,或者从C/C++程序中调用Java的类和...
### Java调用C和C++的关键技术:JNI详解 #### 一、引言 随着软件开发领域的不断发展,跨语言编程已成为一种趋势。Java作为一种广泛使用的编程语言,因其平台无关性而受到开发者的青睐。然而,Java为了保持其跨平台...
### c++调用java工程:深入理解JNI技术 在现代软件开发中,多语言混合编程已成为常态,特别是在大型项目中,不同的编程语言被用于解决各自领域的问题,以达到最佳的性能和开发效率。C++与Java,作为两种广泛使用的...
2. **Java调用C/C++** - **本地方法接口**:Java代码通过`System.loadLibrary()`加载动态链接库(DLL或SO),然后通过`native`方法调用C/C++函数。 - **JNI函数注册**:C/C++代码需要使用`RegisterNatives()`函数...
在C或C++中调用JAVA方法是一种常见的跨语言交互技术,主要依赖于Java Native Interface (JNI)。JNI是Java平台的一部分,它允许Java代码和其他语言编写的代码进行交互,从而实现混合编程。JNI提供了丰富的API,使得...
标题“java调用c++生成so库”指的是在Linux环境下,通过JNI技术,Java程序可以调用预先用C++编译生成的动态链接库(.so文件)。.so文件是Linux下的动态共享对象,相当于Windows下的.DLL文件,它包含了可由多个程序...
本案例探讨的是如何使用C++调用Java函数,这通常涉及到JNI(Java Native Interface)技术。以下是对这个实战项目的详细解释: 首先,我们要理解标题"实战-C++调用Java函数"所涉及的核心知识点。C++是一种强大的系统...
标题中的"java写的一个使用jni调用c/c++的dll"意味着我们要创建一个Java项目,该项目包含一个或多个`native`方法,这些方法的实现将在C/C++中完成。接着,我们需要使用`javah`工具生成JNI头文件,这个头文件定义了...
#### 三、Java调用C语言的基本步骤 1. **定义Native Method** 在Java类中声明native方法,这些方法实际上是在本地代码中实现的。 ```java public class TestDLL { static { System.loadLibrary("goodluck"); }...
总结来说,Android调用C/C++主要涉及JNI的使用,包括本地方法声明、头文件生成、C/C++代码编写、库编译、Java调用等多个步骤。通过这个过程,开发者可以充分利用C/C++的性能优势来优化应用程序的关键部分。如果在...
Java调用C++类对象是一种跨语言交互技术,主要用于利用Java的平台独立性和C++的高性能。这种技术通常依赖于Java Native Interface (JNI),它允许Java代码直接调用本地(如C++)代码,反之亦然。下面我们将深入探讨...