0

我在使用 JNA 的 java 中使用 dll,但出现以下错误

线程“主”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());

   }
}
4

1 回答 1

0

这个 Nugget 非常易于使用并且运行良好。https://www.nuget.org/packages/UnmanagedExports

您需要 Visual Studio 2012 (express)。安装后,只需 [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.");
        }
于 2013-10-30T16:21:31.693 回答