Я получаю ошибку: произошел сбой вне виртуальной машины Java в собственном коде . всякий раз, когда я запускаю файл класса с собственной библиотекой и файлом модуля .net, он работает нормально.
но когда я пытаюсь запустить один файл класса и нативную библиотеку, происходит сбой. пожалуйста, уточните мою ошибку, которую я сделал, пожалуйста, просмотрите мой код.
для справки с параметром
==========================================
public class Sum
{
public int add(int a, int b)
{
return a + b;
}
}
===========================================
сохранить как Sum.cs и скомпилировать его в модуль
используя cmd:
csc / t: модуль 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
создаст 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 / Включить путь к каталогу
построить проект.
Получим JSample DLL
запустить проект
с модулем C # .net, собственным файлом DLL и файлом класса в одной папке.
Java тест
25
но всякий раз, когда я запускаю код только с файлом dll и файлом класса .
это показывает отчет об ошибке Сбой произошел вне виртуальной машины Java в собственном коде.
поясните, как перенести управляемый код C # в C ++ (неуправляемый код Win32). файл библиотеки.