JPEG文件的读写(三)

来源:互联网 发布:淘宝联盟加油升级 编辑:程序博客网 时间:2024/05/22 15:13

在java中调用C语言的DLL共享动态库的方法.我主要参考是j2sdk文档中JNI中的部分,同时也看了看部分jni.h及相关头文件,
感觉实现起来还是比较容易的.
参考了http://www.cnblogs.com/Aimd/archive/2006/08/18/480213.html和recv的博客,很容易就制作成功了一个java方面的
JNI调用.

  1. package interfaces;
  2. public class MyNative {
  3.     public static native String recognize(String file);
  4.     public static String recognizeFile(String file) {
  5.         return recognize(file);
  6.     }
  7.     static {
  8.         System.loadLibrary("JavaJNIDLL");
  9.     }
  10.     public static void main(String[] args) {
  11.         String res = recognizeFile("vercode.jpg");
  12.         System.out.println(res);
  13.     }
  14. }

[lidh04@localhost~$] javac interfaces.MyNative.java
[lidh04@localhost~$] javah -jni interfaces.MyNative
[lidh04@localhost~$] ls
interfaces_MyNative.h  interfaces
然后部分C实现代码是这样的:

  1. #include <stdlib.h>
  2. #include "interfaces_MyNative.h"
  3. #include "recognize.h"
  4. int recognize_non8bit_figure_by_file(const char *file, char result[MAX_FIGURES+1]);
  5. jstring JNICALL Java_interfaces_MyNative_recognize (JNIEnv *jEnv, jclass jcls, jstring jfile)
  6. {
  7.     const char *fileName = jEnv->GetStringUTFChars(jfile, 0);
  8.     char buf[MAX_FIGURES+1] = {0};
  9.     recognize_non8bit_figure_by_file(fileName, buf);
  10.     jchar uniRes[MAX_FIGURES+1] = {0};
  11.     char *p = buf;
  12.     jchar *pUincode = uniRes;
  13.     while (*p)
  14.     {
  15.         *pUincode++ = *p++; 
  16.     }
  17.     int len = pUincode - uniRes;
  18.     assert(len < MAX_FIGURES + 1 && len >= 0);
  19.     jstring result = jEnv->NewString(uniRes, len);
  20.     return result;
  21. }

然后制作一个共享库就行了,放在MyNative类类包interfaces的目录下,然后就可以运行进行了识别了,这样就可以完美地把
java和C++语言的结合进来, 不再出现前面用java调用外面程序出现死锁的情况了.就也算是一种解决方案了吧.

呵呵,,,用java自己开发出JPG到BMP程序,这样就可以完全实现纯JAVA的实现代码了.目前正在努力中....




<script type="text/javascript"><!--google_ad_client = "pub-1307274723602242";/* 728x15, 创建于 09-3-6 */google_ad_slot = "3124229201";google_ad_width = 728;google_ad_height = 15;// --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

原创粉丝点击