Правильное отображение для SHChangeNotify в JNA - PullRequest
1 голос
/ 01 декабря 2011

Это синтаксис для функции SHChangeNotify из MSDN:

void SHChangeNotify(
  LONG wEventId,
  UINT uFlags,
  __in_opt  LPCVOID dwItem1,
  __in_opt  LPCVOID dwItem2
);

Я должен написать ее Java-аналог в Java Native Access [JNA], но это объявление кажется неправильным:

public interface Shell32 extends com.sun.jna.platform.win32.Shell32 {

    public Shell32 INSTANCE = (Shell32) Native.loadLibrary(Shell32.class);

    void SHChangeNotify(long wEventId, int uFlags, Pointer dwItem1, Pointer dwItem2);

}

Я получил следующее исключение:

Исключение в потоке "main" java.lang.UnsatisfiedLinkError: Ошибка при поиске функции 'SHChangeNotify'

Любая идея, какправильно написать?

1 Ответ

1 голос
/ 01 декабря 2011

Вместо расширения интерфейса Shell32 с com.sun.jna.platform.win32.Shell32, расширения с StdCallLibrary

public interface Shell32 extends StdCallLibrary {
    final static Map<String, Object> WIN32API_OPTIONS = new HashMap<String, Object>() {
        private static final long serialVersionUID = 1L;
        {
            put(Library.OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
            put(Library.OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
        }
    };

    public Shell32 INSTANCE = (Shell32) Native.loadLibrary("Shell32", Shell32.class, WIN32API_OPTIONS);

    //whatever you want to expose here
}
...