JPEG文件的读写(三)

在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"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值