Использование JNA для ссылки на пользовательские DLL - PullRequest
10 голосов
/ 29 января 2009

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

Спасибо.

1 Ответ

11 голосов
/ 29 января 2009

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

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 более понятным.

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

...