【问题标题】:How to use .dll in Java [duplicate]如何在 Java 中使用 .dll [重复]
【发布时间】:2015-02-17 18:24:20
【问题描述】:

我有一些 C# 代码已编译成 .dll 以用作其他程序的资源。如何将其导入我的 Java 项目以供使用,然后如何引用 dll 中的代码。我正在使用 Eclispe for Java。

【问题讨论】:

  • @JohnD 我读过...我正在看,但并没有真正明白,所以这就是我问这个问题的原因
  • “没有真正明白”我真的不认为你会在这项任务上取得很大的成功,你正在尝试做的事情没有得到很好的支持并且更高级。我会评估其他选项。
  • @JohnD 还有什么其他选项可以让我在 Java 中使用 C#。转换代码不是一种选择。
  • 我的意思是在 Java 中使用 C# 代码以外的选项。
  • @JohnD 这也不是一个选项。您对我如何做到这一点还有其他想法吗?

标签: java c# dll


【解决方案1】:

恕我直言,最简单的方法是使用 JNA(Java Native Access)库,它简化了流程。 首先,下载 jna.jar (https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna/4.1.0/jna-4.1.0.jar) 并将其附加到您的项目中。

稍后,在 Java 中创建一个接口,它将通过以下方式在您的 .dll 库和 java 代码之间建立桥梁:

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


public interface CLibrary extends Library {
    CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
        (Platform.isWindows() ? "windowsDLLName" : "otherDLLName"), CLibrary.class);
    void someMethof(String format, Object... args); // <--example function from dll lib
}

然后在调用 f.e. 的 java 代码中使用它。

  CLibrary.INSTANCE.someMethod()

您必须涵盖一些主题:

  • JVM 访问本机 dll 库,请参阅 https://github.com/twall/jna/blob/master/www/GettingStarted.md
  • Java 和 C/C++ 之间的类型映射,参见http://en.wikipedia.org/wiki/Java_Native_Access 如果您需要示例,这里有一些来源:
  • https://github.com/twall/jna/blob/master/www/GettingStarted.md
  • http://en.wikipedia.org/wiki/Java_Native_Access
  • blog.mwrobel.eu/how-to-call-dll-methods-from-java/
  • 【讨论】:

    • 请参阅此元讨论,了解为什么基本上只是链接的答案实际上不被接受:meta.stackexchange.com/questions/8231/…
    • @Grzesuav 但是如果这不是本机 Windows 程序怎么办?在代码中它说 ifWindows() 那么这是否意味着这只适用于 Windows?有没有通用的方法来做这部分?
    • 没有“通用”路径,因为本地程序需要按平台单独编译,例如在 linux 上,您没有 dll 库,因此您需要将本机程序也编译为 linux *.so 库。你到底想达到什么目的?我认为问题是从java调用本机代码。如果您处理本机代码,则您是特定于平台的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多