我遇到错误:崩溃发生在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
它将创建test.h
使用visual studio创建win32项目(我使用的是VS2010) 选择项目名称为JSample
包含header和C#.net模块 为manged C ++转换写标题
============================================== < / p>
#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
运行该项目 使用C#.net模块,本机DLL文件和同一文件夹中的类文件。
java test
25
但每当我使用 dll文件和类文件运行代码时。 它显示错误报告崩溃发生在本机代码中的Java虚拟机之外。 请说明如何将托管代码C#移植到C ++(Win32 Un-Managed代码)中。库文件。
答案 0 :(得分:1)
要使用Java中的.NET程序集,我强烈建议您查看IKVM,它是一个桥接到.NET Runtime的Java VM。
我已经在(我认为)2004中使用了这个用于生产软件并且它工作得很好。该项目得到了积极维护,并且最近获得了对.NET 4和Java 7的支持。
您可以选择
两种方式都有预处理步骤将罐子翻译成DLLS或反之亦然。