通过JNA在java中使用DLL

时间:2013-05-09 19:07:47

标签: java .net jna

我在使用JNA的java中使用dll,但我收到的错误

线程“main”中的异常java.lang.UnsatisfiedLinkError:查找函数'GetStatus'时出错:找不到指定的过程。

没有得到如何解决此问题?

请帮忙。

这是java代码

import com.sun.jna.Library;
import com.sun.jna.Native;



 /** Simple example of native library declaration and usage. */
public class First {
     public interface TEST extends Library {
       public String GetStatus();
   }

    public static void main(String[] args) {

      TEST obj = (TEST ) Native.loadLibrary("TEST ", TEST .class);

       System.out.println( obj.GetStatus());

   }
}

1 个答案:

答案 0 :(得分:0)

这款Nugget非常易于使用且操作完美。 https://www.nuget.org/packages/UnmanagedExports

您需要Visual Studio 2012(快速)。 安装后,只需在要导出的任何静态函数之前添加[RGiesecke.DllExport.DllExport]。就是这样!

示例:

<强> C#

[RGiesecke.DllExport.DllExport]
public static int YourFunction(string data)
{
     /*Your code here*/
     return 1;
}

<强>爪哇

在顶部添加导入:

   import com.sun.jna.Native;

在班级中添加界面。它的C#函数名称前面带有字母“I”:

  public interface IYourFunction extends com.sun.jna.Library
    {
       public int YourFunction(String tStr);
    };

在您班级中的所需位置调用您的DLL:

IYourFunction iYourFunction = (IYourFunction )Native.loadLibrary("full or relative path to DLL withouth the .dll extention", IYourFunction.class);//call JNA
        System.out.println("Returned: " + IYourFunction.YourFunction("some parameter"));

编辑: 如果DLL是32位,则JDK / JRE也必须是32位。将以下检查添加到您的代码中:

if(!System.getProperty("os.arch").equals("x86")) {
            throw new Exception(".NET DLL " + "32bits JRE/JDK is required. Currently using " + System.getProperty("os.arch") + ".\r\nTry changing your PATH environement variable.");
        }