说明:下面遇到符号>都表示命令行操作,符号//表注示
1.新建一个java项目,一个包base,一个类JniTest.java代码如下:
package base; //包名
public class JniTest {
static {
System.loadLibrary("hello"); //加载dll,hello为dll文件名
}
public native String SayHello(String s); //声明dll中要实现的方法
public static void main(String[] args) {
JniTest jniTest = new JniTest();
String result = jniTest.SayHello("World");//调用dll中方法并返回值
System.out.println("java :" + result);
}
}
>cd d:\projects\SsiDemo\src\main\java//进入JniTest.java文件包的上层目录
>javac base\JniTest.java//编译java文件
>javah base.JniTest//生成c++头文件 base_JniTest.h,该文件请不要修改
2.新建一个动态链接库项目,将上面生成的头文件base_JniTest.h添加到项目中,将jdk安装目录\include\jni.h,jni_md.h两个头文件,拷贝到编译器安装目录\include目录下,在项目中新建一个文件base_JniTest.cpp代码如下:
#include "base_JniTest.h"
#include <stdio.h>
JNIEXPORT jstring JNICALL Java_base_JniTest_SayHello
(JNIEnv * env, jobject arg, jstring instring)
{
const jbyte *str =
(const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );
printf("hello :%s\n",str);
return instring;
}
>cd d:\CodeBlocks\HelloWorld//进入c++项目目录
>g++ -Wl,--kill-at -shared -o hello.dll base_JniTest.cpp//编译生成dll,需注意若使用codeblocks开发需要使用该命令编译.vc++6.0,及devc++都可以在ide中编译
>copy hello.dll c:\Windows\System32//把生成的dll文件拷贝到系统变量目录,360可能会提示,请选择不处理或添加到信任列表
>cd d:\projects\SsiDemo\src\main\java//进入JniTest.java文件包的上层目录
>java base.JniTest//运行java项目输出运行结果如下:
hello :World
java :World
分享到:
相关推荐
总结来说,这个"JNI DEMO"是一个完整的示例,展示了如何使用Java的JNI技术来调用C/C++编写的DLL。它包括了Java代码、JNI接口的实现、DLL的编译以及Java应用的运行。对于初学者,这是一个很好的实践教程,即使没有...
JNI允许Java代码和其他语言写的代码进行交互,包括调用C/C++编译的动态链接库(DLL)文件。下面将详细介绍如何使用JNI来调用DLL,并解释相关知识点。 1. **JNI简介** JNI是Java平台的标准部分,提供了一组接口,...
Java 通过 JNI 调用 C/C++ 实现动态库加载 Java Native Interface (JNI) 是 Java虚拟机(JVM)提供的一种接口,允许 Java 代码和本地代码(如 C/C++)之间的交互。通过 JNI,Java 程序可以调用 C/C++ 代码,实现 ...
JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java Native Interface)是 Java ...
JAVA通过JNI或JNA方式调用C/C++ DLL demo。内含可用的DLL文件。可用于学习java调用动态库的方式。
本教程将深入讲解如何使用JNI在Java中调用C/C++的本地库。 首先,我们需要理解JNI的基本概念。JNI提供了一套接口,让Java虚拟机(JVM)能够调用本地方法,这些方法由C或C++编写,并编译成动态链接库(如Windows下的...
Java 使用 JNA(Java Native Access)调用C/C++编写的第三方动态库(DLL文件)是一种常见的技术,它允许Java程序直接与本地操作系统接口交互,而无需编写JNI(Java Native Interface)代码。JNA 提供了一种相对简洁...
在这种情况下,"springboot+jna/jni调用动态so/dll库"是一个重要的主题,它涉及到Spring Boot应用如何利用Java Native Interface (JNI) 和 Java Native Access (JNA) 这两种技术来调用操作系统级别的动态链接库(.so...
完整的展示了Java调用C++ API/dll示例程序. 说明如下: 1. mrSocketAPICInt是准备被java调用的API 2. mrSocketAPIJavaInt是java调用C++ api的中间层 3. mrSocketAPIJavaIntDemo是java程序,展示与C++ api如何对接。...
完整的实现java跨平台调用C程序源码,包含JAVA源码和C源码以及编译后的demo dll。将dll放到jdk bin目录下,java 项目可以直接运行。若要修改dll可以,修改C源码后重新编译生成dll。该demo处理了多线程调用c,全局...
JNI 将 Java 应用程序与 C++ DLL 文件集成需要以下步骤:创建一个 Java 工程,生成 `.class` 文件,使用 `javah` 命令生成 `.h` 头文件,创建一个 C++ 工程,并将生成的 `.h` 头文件复制到工程中,编写 C++ 代码,并...
Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。...详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
**第一步:** 创建一个C/C++ DLL文件,通常是通过SDK接口提供的。 - **C/C++代码示例:** ```c extern "C" __declspec(dllexport) void hello() { printf("Hello from C/C++\n"); } ``` - **生成DLL文件:**...
Java Native Interface (JNI) 是Java平台提供的一种机制,允许Java代码和其他语言写的代码进行交互。本教程将详细讲解如何将C++库封装为JNI接口,以便于Java程序调用。 首先,了解JNI的基本概念。JNI是一套接口,它...
接下来,`BridgeWinJava.zip`可能包含了一个Windows平台下的Java调用C++的示例项目。这个项目可能包括: 1. **Windows特定的JNI实现**:可能涉及到Windows API的使用,如动态库加载函数LoadLibrary和GetProcAddress...
在某些场景下,比如调用操作系统特定的功能或者利用已有的C/C++库,我们需要使用JNI来实现Java与本地代码(如DLL动态链接库)的交互。本教程将详细介绍如何通过JNI在Java中调用DLL的完整步骤。 1. **创建Java类和...
总结来说,这个实例展示了如何使用JNI调用第三方DLL的基本步骤:在Java中声明native方法,生成JNI头文件,实现C/C++代码并调用DLL函数,最后编译生成本地库。虽然这是一个简单的例子,但理解这些基本概念对于深入...