如何使用JNA访问Java代码中的DLL方法?

时间:2012-01-28 13:01:17

标签: java eclipse dll

通过运行System.loadLibrary("myAPI"),我验证了DLL文件“myAPI.dll”可以成功加载到我的Eclipse Java项目中。现在我需要从我的Java代码中调用此DLL文件中指定的方法。为此,我将JNA添加到我的Java项目中。然后我编写了下面给出的代码片段,它应该能够获取类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");
    }
}
}

2 个答案:

答案 0 :(得分:1)

不确定您面临的问题但是作为一种做法,您的myAPI界面应该使用适当的parameter mapping逐字声明所有方法。我在你的界面里看不到任何方法。

请通过@Perception

查看this link以及上述链接

答案 1 :(得分:0)

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