JNI 调用C/C++
来源:互联网 发布:linux ctrl alt del 编辑:程序博客网 时间:2024/05/17 13:12
JNI调用可以加快JAVA的运行速度,主要是将关键的代码用C/C++ 或者mfc完成,在这里贴上我写的一段代码,有兴趣的可以参考:
头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_com_wintone_TLConnectJNI */
#ifndef _Included_cn_com_wintone_TLConnectJNI
#define _Included_cn_com_wintone_TLConnectJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: Prt
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_cn_com_wintone_TLConnectJNI_Prt
(JNIEnv *, jobject);
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_initOCRTL
(JNIEnv *envPram, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: uninitOCRTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_uninitOCRTL
(JNIEnv *envPram, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: setChineseTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_setChineseTL
(JNIEnv *, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: setEnglishTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_setEnglishTL
(JNIEnv *, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: setNumberTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_setNumberTL
(JNIEnv *, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: setSymbolTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_setSymbolTL
(JNIEnv *, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: setAllTL
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_setAllTL
(JNIEnv *, jobject);
/*
* Class: cn_com_wintone_TLConnectJNI
* Method: setRangeEnglishSmallTL
* Signature: ()Z
*/
JNIEXPORT jstring JNICALL Java_cn_com_wintone_TLConnectJNI_RecognizeTL
(JNIEnv *envPram, jobject, jintArray ary, jint size);
JNIEXPORT void JNICALL Java_cn_com_wintone_TLConnectJNI_SetRange
(JNIEnv *envPram, jobject, jint range);
#ifdef __cplusplus
}
#endif
#endif
源文件:
#include "cn_com_wintone_TLConnectJNI.h"
#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "TLPENSC.h"
//#include "TLPEN_3RD.h"
#include "TLpen_V4.h"
#define LOGSTRINGSIZE 255
#define LIBFILE "/data/TLPENPDA.lib"
#define SIZE_RamAddress (1024*4)
char *g_RamAddress =0;//
char *g_LibStartAddress = 0;
char _TAG[]= "123321";
char *TAG = (char*)_TAG;
void getLibAdress(JNIEnv * envParam);//获取Lib地址
void printLog(JNIEnv * envParam, const char *ch0, const char *ch1)
{
jclass clsLog = envParam->FindClass("android/util/Log");
jmethodID midLoge = envParam->GetStaticMethodID(clsLog, "d", "(Ljava/lang/String;Ljava/lang/String;)I");
jstring str0 = envParam->NewStringUTF( ch0);
jstring str1 = envParam->NewStringUTF(ch1);
envParam->CallStaticIntMethod( clsLog, midLoge, str0, str1 );
}
JNIEXPORT void JNICALL Java_cn_com_wintone_TLConnectJNI_Prt
(JNIEnv *envParam, jobject)
{
printLog(envParam,"connectJNI","connectJNI");
}
void getLibAdress(JNIEnv * envParam)
{
/*FILE * TLPENLibFile;
long TotalFileLength;
printLog(envParam, TAG, "---begin---getLibAdress");
if((TLPENLibFile=fopen(LIBFILE,"rb"))==NULL)
{
printLog(envParam, TAG, "---funk!---getLibAdress");
return ;
}
fseek(TLPENLibFile,0,SEEK_END);
TotalFileLength=ftell(TLPENLibFile);
fseek(TLPENLibFile,0,SEEK_SET);
g_LibStartAddress=(char *)malloc(TotalFileLength);
fread(g_LibStartAddress,sizeof(char),TotalFileLength,TLPENLibFile);
fclose(TLPENLibFile);
printLog(envParam, TAG, "---end---getLibAdress");
return ;*/
g_LibStartAddress = LibStartAddress ;
}
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_initOCRTL
(JNIEnv *envParam, jobject)
{
char ch0[LOGSTRINGSIZE] = "123321";
char ch1[LOGSTRINGSIZE] = "-----initOCRTL-----";
TLError errorRet = 0;
//printLog(envParam, ch0, ch1);
getLibAdress(envParam);
//printLog(envParam, ch0, ch1);
g_RamAddress = new char[SIZE_RamAddress];
memset(g_RamAddress, 0, SIZE_RamAddress);
//printLog(envParam, ch0, ch1);
errorRet = TLRecognizeInit(
g_RamAddress,
SIZE_RamAddress,
g_LibStartAddress);
//printLog(envParam, ch0, ch1);
if(errorRet != 0)
{
printLog(envParam, TAG, "Funk!----TLRecognizeInit");
return 0;
}
//printLog(envParam, ch0, ch1);
//printLog(envParam, TAG, "OK!--------TLRecognizeInit");
if(0 != (*TLSetRange)(0x0400,g_RamAddress))
printLog(envParam, TAG, "fuck!--------TLSetRange");
return 1;
}
JNIEXPORT jboolean JNICALL Java_cn_com_wintone_TLConnectJNI_uninitOCRTL
(JNIEnv *envParam, jobject)
{
char ch0[LOGSTRINGSIZE] = "123321";
char ch1[LOGSTRINGSIZE] = "-----uninitOCRTL--------";
//printLog(envParam, ch0, ch1);
if(0 != (*TLRecognizeEnd)(g_RamAddress))
{
printLog(envParam, TAG, "Funk!----TLRecognizeEnd");
//return 0;
}
delete g_RamAddress;
return 1;
}
JNIEXPORT void JNICALL Java_cn_com_wintone_TLConnectJNI_SetRange
(JNIEnv * envParam, jobject, jint range)
{
// printLog(envParam, TAG, "--Java_cn_TL_size_twe_TLConnectJNI_SetRange");
if(0 != TLSetRange(range,g_RamAddress))
printLog(envParam, "", "Java_cn_com_wintone_TLConnectJNI_SetRange error");
}
JNIEXPORT jstring JNICALL Java_cn_com_wintone_TLConnectJNI_RecognizeTL
(JNIEnv *envParam, jobject, jintArray ary, jint size)
{
// printLog(envParam, TAG, "OK!----TLConnectJNI_RecognizeTL");
// printLog(envParam, TAG, "OK!----TLConnectJNI_RecognizeTL");
int* pCh = 0;unsigned short CandidateResult[30] = {0};
unsigned char character[1024*5 ]={0};
pCh = (envParam->GetIntArrayElements(ary, false));
for(int i=0; i<size; i++)
{
character[i] = (unsigned char)(pCh[i]);
}
if(0 != (*TLRecognize)(character, 1024*5, CandidateResult, g_RamAddress))
{
printLog(envParam, TAG, "NO!----TLConnectJNI_RecognizeTL");
}
jstring strRet = envParam->NewString((jchar *)CandidateResult,30);
// printLog(envParam, TAG, "OK!----TLConnectJNI_RecognizeTL");
return strRet;
}
java代码:
package cn.com.wintone;
import android.util.Log;
public class TLConnectJNI {
private final static String m_tag = "TLConnectJNI";
static
{
//Log.d(m_tag, "begin load libTLCJNI.so");
System.load("/data/data/cn.com.wintone/lib/libTLJNI.so");
// System.loadLibrary("TLCJNI.so");
//System.loadLibrary("TLCJNI");
//Log.d(m_tag, "load libTLCJNI.so OK!");
}
public native boolean initOCRTL();
public native boolean uninitOCRTL();
public native boolean setChineseTL();
public native boolean setEnglishTL();
public native boolean setNumberTL();
public native boolean setSymbolTL();
public native boolean setAllTL();
public native boolean setRangeEnglishSmallTL();
public native boolean setRangeEnglishBigTL();
public native boolean setSpeedTL();
public native void RecognizeUShortTL();
public native String RecognizeTL(int []ch, int index);
public native void SetRange(int range);
////////////////////////////////////////////////
private TLConnectJNI()
{
}
private static TLConnectJNI m_JNIInstance = null;
public static TLConnectJNI Instance()
{
if(m_JNIInstance == null)
{
m_JNIInstance = new TLConnectJNI();
}
return m_JNIInstance;
}
}
仅供参考,转载请注明出处!
- JNI 调用C/C++
- Java调用C JNI
- JNI调用C方法
- jni c调用java
- JNI java c 调用
- JNI C调用Java
- Java JNI 调用c/cpp
- C语言调用Java JNI
- java JNI调用c程序
- JNI学习-C 调用Java
- android JNI调用C/C++
- android jni调用c库
- Android JNI 调用 C/C++
- Android JNI 调用 C/C++
- JNI-->Java调用C语言
- JNI-->C调用Java语言
- Android JNI C调用Java
- JNI调用c/c++代码
- 特制作音画合成制作室--加字幕 音视频合成
- 复合语句(compound statement)
- CET的中文版
- 程序开发界面与代码分离技术-界面描述语言
- 关于设计模式的概念
- JNI 调用C/C++
- ArcIMS的体系结构
- oracle函数索引小结
- Ubuntu 9.04 使用 virtualbox usb
- Apache2.2+Subversion1.6.6+TortoiseSVN1.6.6
- 处理apt-get update遇到的PUB KEY GPG ERROR
- 程序员的温情管理文化
- 有用的博客
- 电子商务中网络安全的具体问题