Подтвердить что ты не робот

Использование JNA для связи с пользовательской dll

Как мне получить доступ к пользовательским функциям .lib/.dll с помощью JNA? Может ли кто-нибудь привести пример?

Спасибо.

4b9b3361

Ответ 1

Пример (из Википедии):

import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Native;

/** Simple example of Windows native library declaration and usage. */
public class BeepExample {
   public interface Kernel32 extends StdCallLibrary {
       // FREQUENCY is expressed in hertz and ranges from 37 to 32767
       // DURATION is expressed in milliseconds
       public boolean Beep(int FREQUENCY, int DURATION);
       public void Sleep(int DURATION);
   }
   public static void main(String[] args) {
    Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", 
           Kernel32.class);
    lib.Beep(698, 500);
    lib.Sleep(500);
    lib.Beep(698, 500);
   }
}

В этом случае мы загружаем его из библиотеки kernel32.dll. Надеюсь, это упростит JNA.

EDIT: я объясню код: Вам необходимо определить интерфейс (который расширяет библиотеку com.sun.jna.Library) с функциями, которые вам нужны из библиотеки. Затем вызовите com.sun.jna.Native.loadLibrary( "LibraryName", InterfaceName.class). Наконец, сохраните вывод в переменной с типом интерфейса. Просто вызовите функции из этой переменной.