说明:下面遇到符号>都表示命令行操作,符号//表注示
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
分享到:
相关推荐
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
通过jni完成java调用c/c++,包含c/c++生成Dll动态库
java 调用 dll 的方法,即JNI的使用,demo中有get()/set()方法,操作步骤详细,即使是没用过java的程序员按照步骤依然可以成功。
完整的展示了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,全局...
springboot+jna/jni调用动态so/dll库
利用JNI技术实现Java中调用C++编写的函数库示例程序源码,并附上参考JNI文档。...详情见本人博客:Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)(http://write.blog.csdn.net/postlist)
JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的...
3) 将c中获取的一个char*的buffer传递给java? 57 4) 不知道占用多少空间的buffer,如何传递出去呢? 58 五、 对JAVA传入数据的处理 58 1) 如果传入的是bytearray的话,作如下处理得到buffer: 58 VIII. C/C++调用...
JNI,JNATIVE,JAWIN 使用Java调用DLL动态链接库的方案我知道的有四种:JNI,Jnative,Jawin,Jacob
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单
Java通过JNI调用C++接口,Demo文档描述(里面有代码),里面有Windows下调用版和linux下调用版,经本人亲自测试,可用。
本资源包括JAVA工程,C++工程,C#dll测试工程
里面是一个java使用JNI调用的实例,包含所有情况如结构体、指针等等
JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单.doc
jni调用c++ delphi中的dll.
Java采用JNI调用VC++生成的dll(Java与C++交互)
请C++同事帮忙写个dll程序,dll去解析开发平台输出的二进制流数据,上层应用平台调用dll得到json报文,然后再去做一些业务处理。 那现在上层应用面临的问题:访问java外部功能接口实现方式(即调用dll)怎么选择及...
这提供了一个在Java平台上调用C/C++的一种途径。 ———————————————— 版权声明:本文为CSDN博主「clever101」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:...