如何从java中的c#dll调用方法?

时间:2011-11-23 06:51:36

标签: java dll

我在visual studio 2008中创建了一个c#dll

c#dll的内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hello
{
    public class Class1
    {
        public static double addUp(double number, double Number)
        {
            return number + Number;
        }
        public static double minus(double number, double Number)
        {
            return number - Number;
        }
    }
}

并通过java我已经使用

加载了hello.dll
  

的System.loadLibrary("你好&#34);

java代码如下:

package pkgnew;
import javax.swing.JOptionPane;
public class check 
{

    public static native double addUp(double number,double Number);
    static 
    {
      try
      {
      System.loadLibrary("hello");
      System.out.println("SUCCESS");
      }catch(Exception ex){ JOptionPane.showMessageDialog(null,"Required DLLs Not Found\n"+ex.getCause(),"Error Loading Libraries", JOptionPane.ERROR_MESSAGE);}
    }

    public static void main(String[] args) 
    {
          new check().getval();
    }

    public void getval() {
        try
        {
       double g=this.addUp(52.2, 51.3);
        }catch(Exception y){System.out.println("ERROR IS:"+y);}
    }
}

但问题是我的输出为:

输出

SUCCESS
Exception in thread "main" java.lang.UnsatisfiedLinkError: pkgnew.check.addUp(DD)D
    at pkgnew.check.addUp(Native Method)
    at pkgnew.check.getval(check.java:35)
    at pkgnew.check.main(check.java:29)
Java Result: 1

任何人都可以告诉我为什么我会收到此错误....以及为什么我无法调用dll方法

2 个答案:

答案 0 :(得分:1)

我不认为你可以在不使用JNI包装器的情况下调用Java中的本机扩展(或者至少有一些库转换为JNI)。您是否尝试过this thread中提到的框架/建议?

答案 1 :(得分:0)

您无法直接在Java中调用C#dll。有一个解决方法。您必须首先为C#代码编写C ++托管类,然后创建一个C ++ DLL并在java中使用它。

This link might be helpful.