当前位置: 首页 > 知识库问答 >
问题:

通过JNA在java中使用DLL

归誉
2023-03-14

我在使用JNA的java中使用dll,但我得到以下错误

线程“main”java中出现异常。lang.UnsatifiedLinkError:查找函数“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个答案

易修洁
2023-03-14

这个掘金是超级容易使用和完美的作品。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;
}

Java语言

在顶部添加导入:

   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.");
        }
 类似资料:
  • 问题内容: 我需要使用JavaScript中jar文件中的类。我正在通过Java ScriptEngine使用JavaScript,并且想做一些与Jython相似的事情, 当我使用Jython执行此操作时,它工作正常,并且python文件可以使用jar文件中的api类。 问题答案: 我可以以此方式在JavaScript中使用jar的类,但是在运行时必须将jar设置为类路径。我正在寻求类似于Jyth

  • 问题内容: 我花了很多时间试图在Java应用程序中使用C#函数,但是没有成功…我在C#中编写了以下lib: 这个dll调用了另一个dll来进行一些操作,但是当我对其进行编译时,我可以在Realse文件夹中找到Dll,并且一切似乎都还可以,所以我使用32bit,64bit和Any CPU选项对其进行了编译,以确保它不是我的问题。 使用32位Dependency Walker 和任何CPU选项分析我的

  • 问题内容: 我一直是一个简单使用的人: 我将接口用作可移植性的类型名称,这样当我问诸如此类的问题时,便可以重新编写代码。 什么时候应该使用过,反之亦然? 问题答案: 摘要 用在最好许多更多使用情况比。如果不确定,请从开始。 并且是List接口的两种不同的实现。用双向链表实现它。ArrayList用动态调整大小的数组实现它。 与标准的链表和数组操作一样,各种方法将具有不同的算法运行时。 对于 是O(

  • 我试图构建一些Java代码来调用用VC++编写的DLL中的一些网络功能。导出的函数包括(来自.h文件) 然后按以下方式调用它 但是执行对CsilGetData的调用会给出 线程“main”java.lang.error:在com.sun.jna.Native.invokeint(本机方法)在com.sun.jna.function.invoke(function.java:371)在com.sun

  • 我编写了以下类来包装win32事件对象的创建 我在Windows7机器上使用JNA3.3,当我试图创建这个类的实例时,我得到了以下堆栈跟踪。 线程“main”java.lang.UnsatifiedLinkError中出现异常:查找函数“CreateEvent”时出错:找不到指定的过程。

  • 问题内容: 我当前正在使用Elasticsearch V2.3.1。我想在Java中使用以下Elasticsearch查询。 上面的查询搜索名为“ kimchy”的“用户”,并使用给定值更新“列表”字段。该查询同时更新多个文档。我在https://www.elastic.co/guide/en/elasticsearch/client/java- api/2.3/java-docs- update