0
我有項目cli C++,我需要它在java中,所以我使用jni來訪問這些方法,並且它沒有dll引用的示例項目但是當我包括任何其他的dll的JRE墜毀,與jni在同一個項目中加載多個dll
更多細節我有這樣的例子:
測試是使用dllNet第一CLI的C++項目,我用我在Java項目:
測試代碼:
using namespace dllNet;
JNIEXPORT jstring JNICALL Java_alquasar_aimetis_AimetisCallJNI_getAllCameras
(JNIEnv *env, jclass cls, jobject srv, jobject cams){
dllNet::Class1::SayHi();
return env->NewStringUTF("Hello, World!");
}
dllNet代碼:
using System;
namespace dllNet
{
public class Class1
{
public static void SayHi()
{
System.Console.WriteLine("Hiiiiiiiiiiiiiiiiii .....");
}
}
}
java代碼:
public class AimetisCallJNI {
static{
System.load("C:/Users/alquasar/Desktop/mejdi/Aimetis/bin/dllNet.dll");
System.load("C:/Users/alquasar/Desktop/mejdi/Aimetis/bin/test.dll");
}
public static native String getAllCameras(ServerAis srv, CamerasAis list);
public static void main(String[] args) {
ServerAis srv = new ServerAis("192.168.0.42", "admin", "admin");
CamerasAis list = new CamerasAis();
new AimetisCallJNI().getAllCameras(srv, list);
}
,這是個錯誤:
A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (0xe0434f4d), pid=4956, tid=4732
#
# JRE version: 6.0_37-b06
# Java VM: Java HotSpot(TM) Client VM (20.12-b01 mixed mode, sharing windows-x86)
# Problematic frame:
# C [KERNELBASE.dll+0xc6e3]
#
# An error report file with more information is saved as:
# C:\Users\alquasar\workspaceMejdi\tn.waycon.alquasar.video.aimetis.impl\hs_err_pid4956.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
你顯然不明白這個問題 –
@fredericknyawaya他有一個名爲'dllNet'的C++ DLL沒有JNI調用,他試圖用'System.load()'加載它,這是無效的。你不瞭解哪一部分? – EJP
現在,dllNet有其他dll引用導致jre崩潰,他顯然沒有問題加載沒有依賴關係的dll。那麼如果包含jni代碼的dll引用了其他dll,你會怎麼做? –