Java 在Windows上加载带有JNA的自定义库

Java 在Windows上加载带有JNA的自定义库,java,c,java-native-interface,jna,Java,C,Java Native Interface,Jna,我有一个.c文件,其中定义了使用JNIEXPORT的方法,我不知道如何在Java类中使用这些方法,并使用 我试图阅读,但我不明白是否可以链接一个特定的.c文件 有人能帮我吗?是的,可以像往常一样构建和编译一个共享库,然后用Native.loadLibrary加载它 C: #include <stdio.h> void exampleMethod(const char* value) { printf("%s\n", value); } import com.sun.jna

我有一个.c文件,其中定义了使用
JNIEXPORT
的方法,我不知道如何在Java类中使用这些方法,并使用

我试图阅读,但我不明白是否可以链接一个特定的.c文件


有人能帮我吗?

是的,可以像往常一样构建和编译一个共享库,然后用
Native.loadLibrary
加载它

C:

#include <stdio.h>

void exampleMethod(const char* value)
{
    printf("%s\n", value);
}
import com.sun.jna.Library;
import com.sun.jna.Native;

public class TestJNA{
  public interface CLibrary extends Library {
    public void exampleMethod(String val);
  }

  public static void main(String[] args) {
    CLibrary mylib = (CLibrary)Native.loadLibrary("test", CLibrary.class);
    mylib.exampleMethod("ImAString");
  }

}
Java:

#include <stdio.h>

void exampleMethod(const char* value)
{
    printf("%s\n", value);
}
import com.sun.jna.Library;
import com.sun.jna.Native;

public class TestJNA{
  public interface CLibrary extends Library {
    public void exampleMethod(String val);
  }

  public static void main(String[] args) {
    CLibrary mylib = (CLibrary)Native.loadLibrary("test", CLibrary.class);
    mylib.exampleMethod("ImAString");
  }

}
由于在查找库时遇到问题,因此通常可以通过配置
java.library.path
添加一个新位置来修复此问题,该位置将搜索.so/.dll:

java -Djava.library.path=c:\dlllocation TestJNA
或者,您可以在加载库之前直接从代码中进行设置(与JNI一起使用,也应该与JNA一起使用,但我没有尝试):


在回答jna的“uraimo”之后,它应该使用jna.library.path而不是java.library.path,这应该可以解决位置问题。

@user43250937 WindowsOk,代码如下所示,只需按照您习惯的方式构建dll。我使用此示例构建了一个.dll文件。但是当我运行代码
时,无法加载库“test.dll”
。该文件位于.c和.java文件的同一目录中。Wat是创建的.dll文件的正确位置?您是从控制台/终端启动还是使用eclipse?@user43250937我使用的是NetBeans,我使用的是
main
方法运行该类。如果您使用的是eclipse,dll应该放在项目根目录中,您可以从控制台将其放在
c:\windows\system32
(丑陋)或者设置库路径:
java-Djava.library.path=c:\dllocation TestJNA
Ok,更新答案以使其适用于每个ide。