【问题标题】:How to access DLL methods in Java code using JNA?如何使用 JNA 访问 Java 代码中的 DLL 方法?
【发布时间】:2012-01-28 13:01:16
【问题描述】:

通过运行System.loadLibrary("myAPI"),我验证了DLL文件“myAPI.dll”可以成功加载到我的Eclipse Java项目中。现在我需要从我的 Java 代码中调用这个 DLL 文件中指定的方法。为此,我将 JNA 添加到我的 Java 项目中。然后我编写了下面给出的代码 sn-p,它应该能够获取类 IProjectProjectFactory(在 DLL 文件中指定)的实例。

我仍然不明白如何使用 JNA 正确实现这一点。我检查了不同的线程,例如this one,但我检查的那些没有提供答案。非常感谢任何帮助。谢谢。

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

public class MyClass {

public interface myAPI extends Library {
    //...
}

void LoadProj() {
    myAPI api = (myAPI) Native.loadLibrary("myAPI",myAPI.class);
    String fileName = "xxx.sp";


    IProject project; // this is wrong but shows what I am trying to do
    try {
        project = ProjectFactory.LoadProject(fileName);
    }
    catch (Exception ex) {
        MessageBox.Show(this, ex.Message, "Load failure");
    }
}
}

【问题讨论】:

  • en.wikipedia.org/wiki/Java_Native_Access上的例子,非常简洁。
  • 这是您在一小时内就整体主题发布的第三个问题。要学会自己做这件事,您将必须培养使用可用文档和示例并自己完成工作的能力。一方面,我不太愿意帮助某人,如果他们看起来没有自己的努力。此外,“我不知道如何实施”不是一个好的论坛问题。如果您需要教程,请在网上搜索教程。如果您有具体问题,请在此处发布。

标签: java eclipse dll


【解决方案1】:

不确定您面临什么问题,但作为实践,您的 myAPI 接口应该使用适当的parameter mapping 逐字声明所有方法。我在您的界面中看不到任何方法。

请查看this link 以及@Perception 上面提到的链接

【讨论】:

    【解决方案2】:

    如果这个 DLL 中没有隐藏 Java 类或 Java 源代码(这会……很奇怪),那么它永远不会以这种方式工作。您不能实例化 C# 类或使用 C# 接口。 MessageBox.Show( 也不是 Java,它是 Windows 窗体代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多