Среда
C ++ DLL, созданная с помощью Visual Studio 2017 Java программа, работающая под Intellij с использованием прилагаемого Java окружения
Когда я запускаю приложение java, я получаю сообщения std :: cout до сообщения обратного вызова Затем система останавливается
Когда я присоединяю отладчик в Visual Studio, я получаю нарушение прав доступа по адресу 0x0 ... 0240
Что-то в CallVoidMethod неверно, но я не уверен что. До сих пор мне не удалось найти ответы, которые применимы к этому простому делу в Интернете.
Код
JAVA
public class Main {
public native void executeNativeCode();
static {
System.loadLibrary("JNITarget" );
}
// write your code here
public static void main(String[] args) {
new Main().executeNativeCode();
System.out.println("Java Done");
}
public void helloWorld() {
System.out.println("Hello World from Java!");
}
}
C ++
// JNITarget.cpp : Defines the exported functions for the DLL application.
//
//#include "stdafx.h"
#include <iostream>
#include <string>
#include "jni.h"
#include "com_poc_Main.h"
#include "JNITarget.h"
JNIEXPORT void JNICALL Java_com_poc_Main_executeNativeCode(JNIEnv * env, jobject thisObj) {
std::cout << "Hello World from C++!" << std::endl;
std::cout << "Get java class object" << std::endl;
jclass thisClass = env->GetObjectClass(thisObj);
std::cout << "Get callback method" << std::endl;
jmethodID callback = env->GetMethodID(thisClass, "helloWorld", "()V");
std::cout << "Call callback method" << std::endl;
env->CallVoidMethod(thisClass, callback);
std::cout << "C++ done" << std::endl;
return;
}```