Java JNI的使用

JNI(JAVA Native Interface使用)(主要是怎么使用)

一、先贴上测试代码:
1.java部分测试代码:
<span style="font-size:14px;">package com.nipc;

public class HelloWorld {
	static{
		System.loadLibrary("JNICpp");
	}
	public HelloWorld(){
	}
	public native void sayHello(String name);
	public static void main(String[]args){
		new HelloWorld().sayHello("World!");
	}
}</span>
2.C部分代码
<span style="font-size:14px;">#include<iostream>
#include"com_nipc_HelloWorld.h"
JNIEXPORT void JNICALL Java_com_nipc_HelloWorld_sayHello
(JNIEnv * env, jobject obj, jstring name)
{
	using  std::cout;
	using std::endl;
	const char* pname = env->GetStringUTFChars(name,nullptr);
	cout << "hello," << pname << endl;
}</span>
二、建立步骤
1.在java工程中完成代码(下面作为例子)
<span style="font-size:14px;">package com.nipc;

public class HelloWorld {
	public HelloWorld(){
	}
	public native void sayHello(String name);
}</span>
让命令行进入java工程src目录,输入命令:javah -jni com.nipc.HelloWorld,会在工程目录下生成 com_nipc_HelloWorld.h文件。
2.新建c/c++工程(win32 dll工程),com_nipc_HelloWorld.h文件copy到头文件中,并在头文件中拷入jni.h和jni_md.h文件,这个两个文件在JDK的include文件夹,CTRL+F7完成编译。此时在工程的Debug文件夹下生成JNICpp.dll(同工程名)文件。至此,dll动态链接库生成,接下来是怎么在java中使用。
3.在java中使用,.dll文件
若使用System.loadLibrary()调用 Dll,两种方法:
1).设定环境变量。
比如:所编辑的Dll在目录“D:/cppProjects/nativecode/release”内,将这个路径复制添加到电脑的环境变量中的path变量内即可。
2).设定项目属性。(开发推荐)
右击项目名|选择属性properties|在左边列表内选择“Java Build Path”|在右边选项卡用选择“source”|点开项目名前的“+”号,选择“Native library location”,“Edit”选择上面“D:/cppProjects/nativecode/release”路径。(当然如果将dll拷贝到workspace下也可以用相对路径。也可右击“src”设定其properties内Native Library项。)
获使用System.load("D:/cppProjects/nativecode/release/JNICpp.dll");参数为直接路径;
至此:可完成java调用c代码,下面几个遇到的问题:
本例子采用方法二解决:



a) 编译出来的dll文件是32位,系统为64位,不能使用;
解决办法:在vs中编译出64位的.dll文件;
详细:
1.选择64为编译器
2.把新编译出来的.dll文件重新引用到java工程中;
b)参考学习网址:
1.https://social.msdn.microsoft.com/Forums/sharepoint/zh-CN/baf946a0-6930-4c0e-82dd-204e336dbee9/vs64dll
2.http://blog.sina.com.cn/s/blog_7b83134b0101bscm.html
3.http://blog.chinaunix.net/uid-26524139-id-3204725.html





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值