Я получаю сообщение об ошибке: сбой произошел за пределами виртуальной машины Java в собственном коде. всякий раз, когда я запускаю файл класса с собственной библиотекой и файлом модуля .net, он работает нормально. но когда я пытаюсь запустить один файл класса и собственную библиотеку, происходит сбой. Пожалуйста, объясните мою ошибку, которую я сделал, пожалуйста, просмотрите мой код. для справки с параметром
==========================================
public class Sum
{
public int add(int a, int b)
{
return a + b;
}
}
===========================================
сохраните как Sum.cs и скомпилируйте его в модуль с помощью cmd:
csc /t:module sum.cs
Создайте файл Java для тестирования
===========================================
public class test{
public native int add(int a,int b);
static {
System.loadLibrary("JSample");
}
public static void main (String[] args) {
System.out.println(new test().add(10,15));
}
}
==========================================
сохраните его как test.java, скомпилируйте как
javac test.java
создать собственный заголовочный файл
тест javah-jni
это создаст test.h
создать проект win32 с помощью Visual Studio (я использовал VS2010) Выберите имя проекта как JSample
включить заголовок и заголовок записи модуля C#.net для управляемого преобразования C++
==============================================
#using <mscorlib.dll>
#using "Sum.netmodule"
using namespace System;
public __gc class SumC
{
public:
Sum __gc *t;
SumC()
{
t = new Sum();
}
int callCSharpSum(int a,int b)
{
return t->add(a,b);
}
};
===========================================
сохраните его как sum.h
создать файл sum.cpp
============================================
#include <jni.h>
#include "test.h"
#include "sum.h"
JNIEXPORT jint JNICALL Java_test_add
(JNIEnv *, jobject, jint a, jint b)
{
SumC* t = new SumC();
return t->callCSharpSum(a ,b );
}
=============================================
оптимизировать компилятор для сборки /clr:oldSyntax Включить путь к каталогу Jdk/Include для сборки проекта. мы получим JSample DLL
запустите проект с модулем С#.net, собственным файлом DLL и файлом класса в одной папке.
тест Java
25
но всякий раз, когда я запускаю код только с файлом DLL и файлом класса. он показывает отчет об ошибке. Сбой произошел за пределами виртуальной машины Java в собственном коде. поясните, пожалуйста, как перенести управляемый код С# на С++ (неуправляемый код Win32). файл библиотеки.