我在使用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());
}
}
答案 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.");
}