Я только начал экспериментировать с JNA и застрял, пытаясь вызвать эту функцию без исключения
Родной прототип:
BOOL WINAPI SystemParametersInfo(
__in UINT uiAction,
__in UINT uiParam,
__inout PVOID pvParam,
__in UINT fWinIni
);
Я предложил такой эквивалент JNA:
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
boolean SystemParametersInfo(
UINT_PTR uiAction,
UINT_PTR uiParam,
Pointer pvParam,
UINT_PTR fWinIni
);
public static final int SPI_GETCLEARTYPE = 0x1048;
public static final int SPI_GETDESKWALLPAPER = 0x0073;
}
И вопрос в том, как вызывать его с разными типами pvParam с помощью указателя?
например SPI_GETCLEARTYPE (где BOOL) и SPI_GETDESKWALLPAPER (где char[])
User32.SystemParametersInfo
, гдеpvParam
(обратите внимание на макрос_inout
) имеет ссылочный тип (поскольку параметры Java передаются по значению). Трюк для создания ссылочного типа в JNA заключается в использовании типа данных массива (за исключением типов JNAByReference
). Таким образом, pvParam может бытьPointerByReference
,boolean[]
,char[]
и т. д. Затем доступ к данным осуществляется по индексу его элемента, например.pvParam[0]
(в зависимости от того, какие у него данные) - person eee   schedule 04.04.2011