C++からJavaを呼び出す
をテンプレートにして作成
[
トップ
|
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
-----
#contents
-----
C:\Program Files (x86)\Java\jdk1.7.0_45\jre\bin\client
C:\Program Files (x86)\Java\jdk1.7.0_45\bin
C:\Program Files (x86)\Java\jdk1.7.0_45\include
C:\Program Files (x86)\Java\jdk1.7.0_45\include\win32
C:\Program Files (x86)\Java\jdk1.7.0_45\lib
#pragma comment(lib, "jvm.lib")
#code(java){{
public class Test {
public static String run()
{
return "Hello world!";
}
}
}}
javac Test.java
#include <jni.h>
#code(java){{
JNIEnv *env;
JavaVM *jvm;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=.";
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_6;
vm_args.options = options;
vm_args.nOptions = 1;
//vm_args.ignoreUnrecognized = true;
int res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if(res){
cout << "cannot run JavaVM : " << res << endl;
return 1;
}
}}
#code(java){{
jclass cls = env->FindClass("Test");
if(cls == 0){
cout << "could not found class : Test" << endl;
return 1;
}
jmethodID cns = env->GetMethodID(cls, "<init>", "()V");
if(cns == NULL){
cout << "could not get <init> method." << endl;
return 1;
}
jobject obj = env->NewObject(cls, cns);
}}
#code(java){{
jmethodID mid = env->GetStaticMethodID(cls, "run", "()Lj...
if(mid == NULL){
cout << "could not get method : " << "run" << endl;
return 1;
}
}}
javap -s Test
#code(java){{
jstring jstr = (jstring)(env->CallObjectMethod(obj, mid));
}}
#code(java){{
const char* cstr = env->GetStringUTFChars(jstr, 0);
char *str = strdup(cstr);
env->ReleaseStringUTFChars(jstr, cstr);
cout << str << endl;
}}
#code(java){{
res = jvm->DestroyJavaVM();
if(res){
cout << "could not destroy JavaVM : " << res << endl;
return 1;
}
}}
終了行:
-----
#contents
-----
C:\Program Files (x86)\Java\jdk1.7.0_45\jre\bin\client
C:\Program Files (x86)\Java\jdk1.7.0_45\bin
C:\Program Files (x86)\Java\jdk1.7.0_45\include
C:\Program Files (x86)\Java\jdk1.7.0_45\include\win32
C:\Program Files (x86)\Java\jdk1.7.0_45\lib
#pragma comment(lib, "jvm.lib")
#code(java){{
public class Test {
public static String run()
{
return "Hello world!";
}
}
}}
javac Test.java
#include <jni.h>
#code(java){{
JNIEnv *env;
JavaVM *jvm;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=.";
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_6;
vm_args.options = options;
vm_args.nOptions = 1;
//vm_args.ignoreUnrecognized = true;
int res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if(res){
cout << "cannot run JavaVM : " << res << endl;
return 1;
}
}}
#code(java){{
jclass cls = env->FindClass("Test");
if(cls == 0){
cout << "could not found class : Test" << endl;
return 1;
}
jmethodID cns = env->GetMethodID(cls, "<init>", "()V");
if(cns == NULL){
cout << "could not get <init> method." << endl;
return 1;
}
jobject obj = env->NewObject(cls, cns);
}}
#code(java){{
jmethodID mid = env->GetStaticMethodID(cls, "run", "()Lj...
if(mid == NULL){
cout << "could not get method : " << "run" << endl;
return 1;
}
}}
javap -s Test
#code(java){{
jstring jstr = (jstring)(env->CallObjectMethod(obj, mid));
}}
#code(java){{
const char* cstr = env->GetStringUTFChars(jstr, 0);
char *str = strdup(cstr);
env->ReleaseStringUTFChars(jstr, cstr);
cout << str << endl;
}}
#code(java){{
res = jvm->DestroyJavaVM();
if(res){
cout << "could not destroy JavaVM : " << res << endl;
return 1;
}
}}
ページ名: