次のコードは、JavaからC++メソッドを呼び出すことができます。
JNITest.java
public class JNITest {
static {
System.load("D:\\gagan docs\\TestJava\\Example.dll");
}
public native int intMethod(int n);
public static void main(String[] args) {
JNITest jnitest = new JNITest();
int square=jnitest.intMethod(5);
System.out.println("HelloWorld");
System.out.println("From init method"+square);
}
}
Example.cpp
#include "JNITest.h"
#include<string.h>
JNIEXPORT jint JNICALL Java_JNITest_intMethod(JNIEnv *env, jobject obj, jint num)
{
return num*num;
}
しかし、以下を使用して上記のCPPからjavaメソッドを呼び出そうとすると、JVMがクラッシュします。
また、createJavaVMメソッドを使用してJVMを作成しようとしましたが、クラッシュしました。
Example.cpp
#include "JNITest.h"
#include<string.h>
static JavaVM *jvm = NULL
JNIEXPORT jint JNICALL Java_JNITest_intMethod(JNIEnv *env, jobject obj, jint num)
{
JNIEnv* jenv;
int res = jvm->AttachCurrentThread((void **)&jenv, NULL);
return num*num;
}
Linux(64ビット)マシンとJDK 64ビット(Java 1.6)を使用しています。
Java-> C++->Javaから完全なフローを作成したいと思います。この問題に関する情報は非常に役立ちます。