У меня есть функция C ++:
struct Result {
//...
};
bool doSomething(Result[]);
Если я использую следующую привязку JNA, вызов функции работает нормально:
public class Result extends Structure {
//...
}
public interface CPPLibrary extends Library {
public static final CPPLibrary INSTANCE = (CPPLibrary)Native.loadLibrary("dllname");
boolean doSomething(Result[]);
}
Но при прямом вызове я попал в IllegalArgumentException , говоря class [Lcom.usta.Result; не поддерживается тип аргумента (в методе calcPV01 в классе com.usta.CPPLibrary) . Мой код JNA для прямого сопоставления вызовов:
public class CPPLibrary implements Library {
Native.register("dllname");
public static native boolean doSomething(Result[]);
}
Я вижу в com.sun.jna. Функция # convertArgument () явно обрабатывает Структура [] , но com.sun.jna.Native # getConversion () , который используется прямым сопоставлением вызовов, не обрабатывает Структура [] .