Как я могу использовать DLL с JNA, у которой нет интерфейса

Потратив много времени на изучение Python для реализации ряда функций на основе DLL в Java через Jython, я забыл прочитать документацию Jython, а отсутствие поддержки ctypes сделало большую часть моего кода бесполезным.

Я не хотел использовать JNI

Я пытаюсь получить доступ к некоторым функциям из pcsll32.dll из Personal Communications с использованием своего HLLAPI.

Мне удалось заставить его работать с Python почти без проблем, было очень легко найти много документации и рецептов в Интернете.

Теперь я случайно обнаружил JNA, и у меня с этим ОЧЕНЬ много проблем. Я едва могу найти информацию об этом, особенно когда пытаюсь получить доступ к нестандартным библиотекам DLL.

Насколько я понимаю, мне нужно написать pcsll32.class, который будет интерфейсом — очень похожим на User32.class, который кажется интерфейсом (или, может быть, я должен назвать это прокси...) для User32.dll.

Что ж, я думаю, что это происходит после прочтения этого .

Итак... Как я могу импортировать внешнюю DLL? Является ли это возможным? Нужно ли писать интерфейс/прокси? Есть ли там образцы?


person Johnny Bigoode    schedule 03.08.2012    source источник


Ответы (1)


Вы должны сделать это следующим образом:

public interface PcShll32 extends StdCallLibrary { //StdCallLibrary is for Windows functions

    PcShll32 INSTANCE = (PcShll32) Native.loadLibrary(
                   "pcshll32", PcShll32.class, W32APIOptions.DEFAULT_OPTIONS); //Options are for Win32API

    // your methods
}

Конечно, вы должны предоставить эту внешнюю библиотеку для JNA.

Для меня лучшим объяснением является исходный код

person Xeon    schedule 03.08.2012
comment
Вы также можете использовать динамические свойства/функции в python для автоматического сопоставления с заданной собственной библиотекой. См. github.com/twall/jna/blob/master/www/< /а>. - person technomage; 03.08.2012