Java调用C++动态库具体实现
来源:互联网 发布:淘宝手机页面设为首页 编辑:程序博客网 时间:2024/05/17 20:31
在我们编写java程序中经常会用到native方法,这些native方法就是用C或者C++编写的动态库方法,如何实现java调用这些方法,以下是根据自己的学习经验总结如下:
1.创建项目
首先在Eclipse中创建一个项目,创建两个类第一个类是HelloWorld.java 第二个类是TestDll.java,HelloWorld.java 代码中是你要创建的本地库方法,要用关键字native申明。例如:
package com;public class HelloWorld {public native void sayHello();}
TestDll.java实现对此方法的调用
public class TestDLL {
public static void main(String[] args){
System.loadLibrary("HelloWorld"); //加载的HelloWorld为动态库dll的名字。或者这一句放在HelloWorld.java中
HelloWorld helloWorld = new HelloWorld();
helloWorld.sayHello();
}
}
2. 生成C/C++头文件
在windows中打开一个命令窗口,进入jnitest工程所在目录下的bin目录如:D:\workspace\jnitest\bin。键入javah -classpath D:\workspace\jnitest\bin HelloWorld命令生成头文件HelloWorld.h。内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_HelloWorld */
#ifndef _Included_com_HelloWorld
#define _Included_com_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_HelloWorld
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_HelloWorld_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
注意不要修改此文件的代码
3.编写本地方法实现
用VC6创建HelloWorld Win32动态链接库工程。将上述生成的头文件HelloWorld.h拷贝到
D:\Program Files\Microsoft Visual Studio\MyProjects\HelloWorld目录下面。
将Java JDK下include目录下的jni.h和\include\win32\jni_md.h两个头文件拷贝到VC安装目录下的例如:D:\Program Files\Microsoft Visual Studio\VC\Include目录下面。在VC IDE中新建HelloWorld.cpp文件,实现头文件中声明的方法并编译生成DLL。
创建DLL过程如下:
.1.新建c++项目,win32控制台程序,命名为:MyDLL,解决方案为:MyDLLSolution.(根据自己项目情况命名)
2.单击“下一步”,“应用程序类型”选择“DLL”,“附加选项”勾选“导出符号”,单击“完成”。
3.单击“下一步”,在HelloWorld.cpp中编写实现java本地方法
List4. HelloWorld.cpp源码
#include "HelloWorld.h"
#include <stdio.h>
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_sayHelloWorld (JNIEnv *, jobject)
{
printf("Hello World!\n");
return;
}
4.点击生成——>生成解决方案
在该项目根目录下的debug目录下会生成几个文件
此时动态库文件生成成功,注意默认情况下生成的是32位dll文件,如果无法调用则需要配置生成64位,点击生成->配置管理->新建
点击生成解决方案 在x64目录下的debug目录下可以找到dll文件
4.运行测试程序
先将生成的DLL拷贝到jnitest工程的D:\workspace\jnitest\bin下面,然后设置DLL搜索路径(在高级系统设置里面将dll文件路径添加到环境变量PATH)为D:\workspace\jnitest\bin(JNI并没有规定必须将dll放在与class文件相同的目录,只要确保JVM能搜索到DLL即可)。重新启动Elipse后,运行测试程序,将看到控制台输出“Hello World!”
说明:JAVA调用native函数时,必须通过System.loadLibrary()或System.load将其native函数所在动态库 加载到虚拟机。并在运行时指明-Djava.library.path或-Dsun.boot.library.path,将其指向包含有native函 数的动态库所在位置。
- Java调用C++动态库具体实现
- 关于Java调用C写的动态链接库的具体实现方法,自己捉摸了好久,现在算是来造福大众了 T _T
- java调用c动态库
- C语言调用MATLAB生成的动态链接库的具体方法
- Java调用c/c++动态链接库
- Java调用C/C++动态库so
- 利用JNative实现Java调用动态库
- 利用JNative实现Java调用动态库
- 利用JNative实现Java调用动态库
- Java调用C/C++实现的DLL动态库——JNI
- Java调用C/C++实现的DLL动态库——JNI
- 实现java调用c
- LoadRunner如何实现动态链接库(C++)的调用
- Java调用动态库
- Java动态库调用
- JAVA使用JNI调用C/C++动态库
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- 线程通信
- TP5 where多条件查询
- Elastic Search快速上手(2):将数据存入ES
- bzoj4145 [AMPPZ2014]The Prices (状压DP)
- 鼠标经过显示下拉选择下拉
- Java调用C++动态库具体实现
- Elastic Search快速上手(3):搜索
- CSS、HTMl使用position: fixed;实现div的高度填满剩余空间
- c和c++总结
- CCF之打酱油
- hi3716m v310怎么进行网络配置?
- centos7 yum安装mysql
- SEO多域名收录解决办法
- 数据库bigint提取成实体对象