вызов переноса csharp на java JNI для запуска на ubuntu

Я получаю сообщение об ошибке: сбой произошел за пределами виртуальной машины 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). файл библиотеки.


person arun kumar non ascii    schedule 02.01.2012    source источник
comment
Чтобы упростить ваш пример, вам не нужно нигде создавать (или освобождать) объекты. У меня есть только Linux, который работает, поэтому я не знаю, в чем ваша ошибка, возможно, вы можете опубликовать краткое описание, чтобы все знали, о чем вы говорите.   -  person Peter Lawrey    schedule 02.01.2012


Ответы (1)


Чтобы использовать сборки .NET из Java, я настоятельно рекомендую вам взглянуть на IKVM, которая представляет собой виртуальную машину Java, которая связывается с .NET Runtime.

Я использовал это еще в (я думаю) 2004 году для производственного программного обеспечения, и это работало хорошо. В настоящее время проект активно поддерживается и получает поддержку .NET 4 и Java 7.

У вас есть выбор

  • запуск кода Java в IKVM, чтобы вы могли использовать библиотеки .NET
  • запустить программу .NET, которая загружает java-библиотеки (например, jar-файлы)

В обоих случаях существует этап предварительной обработки для перевода jar-файлов в DLLS или наоборот.

См. http://ikvm.net.

person sehe    schedule 04.01.2012
comment
спасибо за ответ sehe, но моя цель в этом сделать управляемый код .net для завершения неуправляемого кода (чистая библиотека win32), который способен работать в системе win32 без среды выполнения .net. ubuntu до сих пор является моим вторичным файлом .so, который обычно работает только в системе на базе Linux. - person arun kumar non ascii; 05.01.2012
comment
@arunkumarnonascii: Я не знаю, что вы пытаетесь сказать, но IKVM и Mono (.NET) отлично работают в Linux. Я запустил всю среду eclipse IDE на IKVM в Linux, чтобы использовать управляемый код из плагинов Eclipse... Я использовал почти исключительно Ubuntu, сам - person sehe; 05.01.2012