2012-01-28 1 views
1

Запустив System.loadLibrary("myAPI"), я подтвердил, что DLL-файл «myAPI.dll» может быть успешно загружен в мой проект Java Eclipse. Теперь мне нужно вызвать методы, указанные внутри этого DLL-файла, из моего кода Java. Для этого я добавил JNA в свой проект Java. Затем я написал нижеприведенный фрагмент кода, который должен иметь возможность получать экземпляры классов IProject и ProjectFactory (указанные в файле DLL).Как получить доступ к DLL-методам в Java-коде с помощью JNA?

Я до сих пор не понимаю, как правильно реализовать это с помощью 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

+0

Посмотрите примеры на http://en.wikipedia.org/wiki/Java_Native_Access, они довольно кратки. – Perception

+0

Это третий вопрос, который вы опубликовали в общей теме через час. Чтобы научиться делать это самостоятельно, вам нужно будет развивать свою способность работать с документацией и примерами, доступными и работать через нее самостоятельно. Я, например, менее склонен помогать кому-то, если он выглядит так, как будто они не прилагают никаких усилий. Кроме того, «я не знаю, как реализовать» не является хорошим вопросом форума. Если вам нужен учебник, найдите в Интернете учебник. Если у вас есть конкретный вопрос, напишите здесь. – arcy

ответ

1

Не уверен, что проблема вы столкнулись, но как практика ваш интерфейс MyAPI должен объявить все методы дословно с соответствующим parameter mapping. Я не вижу никаких методов внутри вашего интерфейса.

Пожалуйста чекаут this link, а также ссылку, указанной выше, @Perception

0

Если нет Java классов или исходного Java скрытых внутри этой DLL (что было бы ... странно), то он никогда не будет работать сюда. Вы не можете создавать экземпляры классов C# или использовать интерфейсы C#. MessageBox.Show( тоже не Java, это код Windows Forms.

Смежные вопросы