Вы можете объявить их обоих с помощью StdCallLibrary / StdCallCallback, но поведение может быть не определено на всех платформах.Эта опция игнорируется на платформах, которые не поддерживают альтернативное соглашение о вызовах (которое на данный момент является всем, кроме win32), но не обязательно были протестированы на всех платформах.
Это предпочтительное определение, котороеОпределяет библиотеку stdcall только для Windows.
interface MyLibrary extends Library {
interface MyCallback extends Callback {
public void invoke();
}
void callbackFunction(MyCallback cb);
MyLibrary INSTANCE = (MyLibrary)Native.loadLibrary("mylib", Platform.isWindows() ? MyWin32Library.class : MyLibrary.class);
}
interface MyWin32Library extends MyLibrary, StdCallLibrary {
interface MyStdCallCallback extends MyCallback, StdCallCallback {}
void callbackFunction(MyStdCallCallback cb);
}
Если вы нацеливаетесь только на Linux и Windows, тогда единственного интерфейса может хватить (хотя я бы рекомендовал проверить это):
interface MyLibrary extends StdCallLibrary {
interface MyCallback extends StdCallCallback {
public void invoke();
}
void callbackFunction(MyCallback cb);
MyLibrary INSTANCE = (MyLibrary)Native.loadLibrary("mylib", MyLibrary.class);
}