如何从Java调用.NET dll

5
我有这段代码用于创建一个简单的.NET .dll。它只返回一个int
但是,在Java中它不能正常工作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReturnINT
{
    public class ReturnINT
    {

        public static int RetornaInteiro ()
        {
            try
            {
                int number = 2;

                return number;
            }
            catch (Exception)
            {
                return 1;
            }
        }
    }
}

我该如何在Java中调用方法?

当我使用JNI时,我在Java中遇到了这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Dll.RetornaInteiro()V
      at Dll.RetornaInteiro(Native Method)
      at Dll.main(Dll.java:27)

3
你希望使用.NET库在Java中运行的方式并不清楚...你是打算尝试使用JNI吗? - Jon Skeet
5
可能是重复的问题:如何从Java调用C#代码?和如何从Java应用程序调用C# DLL? - Siva Charan
@Jon:Sun Java 能够与 COM 对象互操作吗?微软的 JVM 可以。 - Ben Voigt
@BenVoigt:我不知道有没有什么好的方法。 - Jon Skeet
2个回答

6

请查看http://www.javonet.com。通过一个jar文件,您可以加载此dll并按照以下方式进行调用:

Javonet.AddReference("your-lib.dll");
int result = Javonet.getType("ReturnINT").Invoke("RetornaInteiro");

Javonet 可以自动加载您的库到 .NET 进程中,并让您访问其中包含的任何类和类型。接下来,您可以获取您的类型并调用静态方法。方法结果和参数会在 JAVA 和 .NET 类型之间自动转换。例如,您可以像这样传递字符串或布尔参数。
Boolean arg1 = true;
String arg2 = "test";
Javonet.getType("ReturnINT").Invoke("MethodWithArguments",arg1,arg2);

您可以拥有自己类型的实例,订阅事件,设置/获取属性和字段,处理异常甚至传递值类型参数。这些都会自动翻译。更多详情请参阅文档:

http://www.javonet.com/quick-start-guide/

附言:我是Javonet团队的成员。因此,如果您对本地集成和我们的产品有任何详细问题,请随时询问我。


还没有,我们计划很快发布Linux支持! - Przemysław Ładyński
@PrzemysławŁadyński 这个可以免费用于内部/本地主机网站吗? - StealthRT
1
@StealthRT 如果是非商业用途,那么可以。请申请学术许可证并告知我们您的项目细节。对于学术和私人非商业项目,我们授予免费许可证。 - Przemysław Ładyński

5

当我输入Java时,我遇到了这个错误:Exception in thread "main" java.lang.UnsatisfiedLinkError: Dll.RetornaInteiro()V at Dll.RetornaInteiro(Native Method) at Dll.main(Dll.java:27) - soamazing
@soamazing - https://groups.google.com/group/jni4net/browse_thread/thread/c8877ceb2bb81a57 - Jirka Hanika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接