首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

EclipseCDT开发JNI记要

2012-10-31 
EclipseCDT开发JNI记录最近需要对RFID读写器进行操作,厂家提供的都是c++的SDK,以前都是在delphi下进行开发

EclipseCDT开发JNI记录

最近需要对RFID读写器进行操作,厂家提供的都是c++的SDK,以前都是在delphi下进行开发也还能用。但是现在实在懒得再去开启Delphi去进行那些数据库的操作(ORM用懒了)。于是考虑怎样在Java下直接调用SDK,前台使用SWT去实现。SWT不用多说,用了这么久感觉还是比较顺手的,非常适合做那些对界面要求不高的应用,大的其实也可以RCP上去也不错,扯远了。今天仔细学习了一下JNI的开发和使用,由于习惯了Eclipse,于是直接选用EclipseCDT来进行C++的开发,网上这样的文章也很多,这里算是留个学习记录吧。

?

?

?

=================正式的分割线=======================

?

1、下载EclipseCDT(这次用的是Windows,暂时就不写Linux下的)

?????没啥说的,下载吧(今天家里电信ADSL免费提速到12M,第一次看到迅雷保持在1M/S以上,那个爽啊·······)

?

2、下载安装MinGW

???? 地址:http://sourceforge.net/projects/mingw/files/

???? 在目录的最上方有一条“Looking for the latest version?


4、为MinGW修改系统变量

???? 右键我的电脑->属性->高级->环境变量->系统变量中添加
???? MINGW_HOME=C:\MinGW
???? LIBRARY_PATH = %MINGW_HOME%\lib
???? C_INCLUDE_PATH = %MINGW_HOME%\include
???? 在PATH变量的最后增加 ;%MINGW_HOME%\bin

?????将C:\MinGW\bin目录下的mingw32-make.exe 改名为 make.exe

?

5、修改Eclipse配置

?????为了让CDT能够采用MinGW进行编译,需要在 Eclipse 中进行设定
?????Window->Preferences->C/C++->Make->New Make Project->New Builder->Binary Parser 取消 Elf Parser(如果本来就没选就别折腾他了) 改选 PE Windows Parser

EclipseCDT开发JNI记要

?

6、新建一个Java项目

EclipseCDT开发JNI记要

?

???? HelloJNI.java代码:

package com.strong.jni;public class HelloJNI {  public native void sayHello();  static {    System.loadLibrary("libStrongCDT");  }  /**   * @param args   */  public static void main(String[] args) {    HelloJNI hjni = new HelloJNI();    hjni.sayHello();    System.out.println("==========");  }}?


7、生成jni的h头文件
?????为了方便,做一个jni.bat文件放到“StrongJNI\bin”目录

set java_home=C:\Program Files\Java\jdk1.6.0_32set path=%java_home%\binset class_path=%java_home%\lib;%java_home%\lib\dt.jar;%java_home%\lib\tools.jarjavah -jni com.strong.jni.HelloJNI@pause

???? 路径根据自己的修改吧,运行后生成一个h的头文件com_strong_jni_HelloJNI.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_strong_jni_HelloJNI */#ifndef _Included_com_strong_jni_HelloJNI#define _Included_com_strong_jni_HelloJNI#ifdef __cplusplusextern "C" {#endif/* * Class:     com_strong_jni_HelloJNI * Method:    sayHello * Signature: ()V */JNIEXPORT void JNICALL Java_com_strong_jni_HelloJNI_sayHello  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif

?

8、建立JNI的C++项目

???? 新建一个MinGW的标准C++项目StrongCDT,将刚才的com_strong_jni_HelloJNI.h拷贝到项目目录

EclipseCDT开发JNI记要
?

???? 最终的项目为:

EclipseCDT开发JNI记要?

?

???? HelloJNI.c代码如下,编写好之后点锤子编译,会在debug目录生成对应的dll文件

#include "com_strong_jni_HelloJNI.h"JNIEXPORT void JNICALL _Java_com_strong_jni_HelloJNI_sayHello(JNIEnv *env, jobject obj) {// 这里是方法实现printf("Hello World Native\nSimen");}

??? 此时,如果代码报错,请增加java的includes,右键项目选Properties -> C/C++ General -> Paths and Symbols在Configuration中选择[All configurations];然后在Includes页签中的Language选择GNU C,单击Add按钮添两个路径如下,java安装路径按照自己的选,注意必须两个都加入:

EclipseCDT开发JNI记要?

?

9、java项目调用dll

???? 把生成好的dll拷贝到项目的lib目录,然后在Run -> Run Configurations -> Arguments中的VM arguments 中添加-Djava.library.path=./lib

EclipseCDT开发JNI记要

?

10、执行成功!?

?

?

热点排行