Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中从c#dll调用方法?_Java_Dll - Fatal编程技术网

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

如何在java中从c#dll调用方法?,java,dll,Java,Dll,我在VisualStudio2008中创建了一个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)

我在VisualStudio2008中创建了一个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;
        }
    }
}
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);}
    }
}
通过java,我使用

System.loadLibrary(“你好”)

java代码如下所示:

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;
        }
    }
}
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方法

我认为在Java中,如果不使用JNI包装器(或者至少是一些在后台转换为JNI的库),就无法调用本机扩展。您是否尝试过中提到的框架/建议?

我认为,如果不使用JNI包装器(或者至少是一些在后台转换为JNI的库),您无法在Java中调用本机扩展。您是否尝试过中提到的框架/建议?

您不能在Java中直接调用C#dll。有一个变通办法。你必须首先为C++代码编写C++托管类,然后创建一个C++的DLL,并在java中使用它。p> 在Java中不能直接调用C#dll。有一个变通办法。你必须首先为C++代码编写C++托管类,然后创建一个C++的DLL,并在java中使用它。p>

你看过那条线了吗?这里有一个免费和一个付费的图书馆,你可能想去看看。另外,如果你想走纯JNI的路,谷歌JNI教程就可以开始了?这里有一个免费和一个付费的图书馆,你可能想去看看。另外,如果你想走纯JNI之路,谷歌JNI教程就可以开始了