c++调用Java以及string互转
来源:互联网 发布:ipad cellular 知乎 编辑:程序博客网 时间:2024/06/06 09:44
c++调用Java以及string互转
分类: c++ java2012-03-08 18:59 1652人阅读 评论(0) 收藏 举报
stringjavac++jnitokenencoding
- //太能折腾了,一个下午终于c++可以调用java中的程序了
- #include <iostream>
- #include <jni.h>
- #include <Windows.h>
- #include <fstream>
- #include <iostream>
- #include <string>
- #ifdef _WIN32
- #define PATH_SEPARATOR ';'
- #else
- #define PATH_SEPARATOR ':'
- #endif
- using namespace std;
- /*C字符串转JNI字符串*/
- jstring stoJstring(JNIEnv* env, const char* pat)
- {
- jclass strClass = env->FindClass("Ljava/lang/String;");
- jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
- jbyteArray bytes = env->NewByteArray(strlen(pat));
- env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
- jstring encoding = env->NewStringUTF("utf-8");
- jstring rstStr =(jstring) env->NewObject(strClass, ctorID, bytes, encoding);
- return rstStr;
- }
- /*JNI字符串转C字符串*/
- char* jstringTostring(JNIEnv* env, jstring jstr)
- {
- char* rtn = NULL;
- jclass clsstring = env->FindClass("java/lang/String");
- jstring strencode = env->NewStringUTF("utf-8");
- jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
- jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);
- jsize alen = env->GetArrayLength(barr);
- jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
- if (alen > 0)
- {
- rtn = (char*)malloc(alen + 1);
- memcpy(rtn, ba, alen);
- rtn[alen] = 0;
- }
- env->ReleaseByteArrayElements(barr, ba, 0);
- return rtn;
- }
- int main()
- {
- /*HMODULE JVM_DLL;
- JVM_DLL = ::LoadLibraryA("C:\\Program Files\\Java\\jdk1.7.0_01\\jre\\bin\\server\\jvm.dll");
- if (JVM_DLL == NULL)
- {
- cout<<"无法加载连接库:jvm.dll!\n";
- return 0;
- }*/
- HINSTANCE hInstance = ::LoadLibraryA("C:\\Program Files\\Java\\jdk1.7.0_01\\jre\\bin\\server\\jvm.dll");
- //HINSTANCE hInstance = ::LoadLibraryA("jvm.dll");
- JavaVMOption options[1];
- JNIEnv *env;
- JavaVM *jvm;
- JavaVMInitArgs vm_args;
- long status;
- jclass cls;
- jmethodID mid;
- jint square;
- jboolean not;
- jobject jobj;
- options[0].optionString = "-Djava.class.path=.";
- vm_args.version = JNI_VERSION_1_2;
- vm_args.nOptions = 1;
- vm_args.options = options;
- status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
- if (status != JNI_ERR)
- {
- cls = env->FindClass("nectec/best/wordseg/ThaiSeg");
- if(cls !=0)
- {
- /*mid = env->GetStaticMethodID( cls, "add", "(II)I");
- if(mid !=0)
- {
- square = env->CallStaticIntMethod( cls, mid, 5,5);
- std::cout << square << std::endl;
- }*/
- jmethodID obj = env->GetMethodID(cls,"<init>","()V");
- if(obj !=0)
- {
- jobj=env->NewObject(cls,obj);
- std::cout << "init ok" << std::endl;
- }
- jmethodID init = env->GetMethodID( cls, "Initial","()V");
- if(init !=0)
- {
- env->CallVoidMethod(jobj, init);
- }
- jmethodID token = env->GetMethodID(cls,"Token","(Ljava/lang/String;)Ljava/lang/String;");
- if (token !=0)
- {
- cerr<<"start token\n";
- ifstream in("data.txt");
- ofstream out("result");
- string line;
- int count = 0;
- while(getline(in,line))
- {
- cerr<<++count<<endl;
- jstring msg =(jstring) env-> CallObjectMethod(jobj, token,stoJstring(env, line.c_str()));
- string rst = jstringTostring(env,msg);
- out<<rst<<endl;
- }
- //cout<<jstringTostring(env,msg);
- out.close();
- in.close();
- }
- }
- jvm->DestroyJavaVM();
- return 0;
- }
- else
- return -1;
- //::FreeLibrary(JVM_DLL);
- ::FreeLibrary(hInstance);
- }
0 0
- c++调用Java以及string互转
- c++调用Java以及string互转
- Java常用包以及String类,函数的调用
- JNI c调用Java 返回值为String
- jni C语言调用java的小例子(java返回string)
- 【C++】String拷贝(包含深拷贝浅拷贝)以及拷贝构造函数中几种调用的情况
- JNI(三)、java代码传递int、String、int[] 并 调用C 代码
- android JNI基本库(jsting转string和C多线程调用java方法的说明)
- C# 调用C++dll string传递问题
- JNI之c调用java的函数,调用java的构造生成对象,得到java的成员,以及C返回Java字符串乱码
- c++调用c函数 以及c调用c++函数
- java调用C语言
- java调用c
- 实现java调用c
- Java调用C/C++
- C调用JAVA
- C/C++调用Java
- java调用C
- Java学习笔记—第六章
- C++设计模式之迭代器模式
- 初识正则表达式(数量,金额)
- 存储过程调试_1
- Git资料记录
- c++调用Java以及string互转
- Hduoj4302【优先队列】
- AOSP---JS版本JDK开发
- 用R语言进行关联分析
- android制作一个简单的天气预报
- 在家创业赚钱告诉你一个月8000元能干啥?
- python对象特殊方法列表
- 第二周项目-2
- 图像特征