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

След като прекарах много време в изучаване на Python за внедряване на серия от базирани на DLL функции в Java чрез Jython - забравих да прочета документацията на Jython и липсата на поддръжка на ctypes направи по-голямата част от моя код безполезен.

Не исках да използвам JNI

Опитвам се да получа достъп до някои функции от pcshll32.dll, от Personal Communications, използвайки своя HLLAPI.

Успях да го накарам да работи с Python почти без проблеми, беше наистина лесно да намеря много документация и рецепти в мрежата.

Сега открих случайно JNA и имам МНОГО проблеми с нея. Едва мога да намеря информация за него, особено когато се опитвам да получа достъп до нестандартни DLL файлове.

Доколкото разбирам, трябва да напиша pcshll32.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