2012-01-28 51 views
1

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

你面临什么错误? – Santosh 2012-01-28 13:16:14

+0

查看http://en.wikipedia.org/wiki/Java_Native_Access上的示例,它们非常简洁。 – Perception 2012-01-28 13:17:31

+0

这是您在一小时内发布在整体主题上的第三个问题。为了学会自己做到这一点,你将不得不开发自己的能力来处理文档和示例,并自己完成它。就我而言,如果看起来他们没有做出自己的努力,我就不太愿意帮助别人。另外,“我不知道如何实施”不是一个好的论坛问题。如果您需要教程,请在网上搜索教程。如果你有一个特定的问题,请在这里发帖。 – arcy 2012-01-28 13:23:12

回答

1

不知道你所面对的问题,而是一个实践的myAPI接口应该声明所有逐字适当parameter mapping方法。我在界面中看不到任何方法。

请检出this link以及由@Perception

0

上面提到如果没有Java类或Java源代码隐藏这个DLL内(这是......怪)的链接,那么它永远行不通这条路。你不能实例化C#类或使用C#接口。 MessageBox.Show(也不是Java,它是Windows Forms代码。