2016-05-31 2 views
0

Мне нужно написать интерфейс подпрограммы Fortran для вызова с Java. Некоторые аргументы в подпрограмме Fortran являются производными типами (custom types/struct). Возможно ли сопоставить их с JNA? Пока я не могу так, как это могло бы работать. Как насчет JNI?Сопоставление пользовательских типов Fortran-to-Java (с JNA)

например. подпрограмма как это:

subroutine mysub(arg) 
implicit none 
type mytype 
    integer:: i 
    real*8 :: a(3) 
end type mytype 

type(mytype) arg 

! do stuff... 

end subroutine mysub 
+0

Можете ли вы привести пример типа производных типов/подпрограмм, о которых вы заботитесь? Некоторые аспекты делают все это намного сложнее. [И вы можете посмотреть на [tag: fortran-iso-c-binding] для использования совместимого с C интерфейса.] – francescalus

+0

@francescalus Я добавил пример того, что я имею в виду –

+0

Надеюсь, ваш пример действительно имеет определение типа _outside_ (но доступный в) подпрограмма ... – francescalus

ответ

1

Да, ЮНА поддерживает агрегатные типы (struct в C) как по ссылке и по значению. Стандартное соглашение для аргументов имеет значение, например.

public interface MyLibrary extends Library { 
    MyLibrary INSTANCE = (MyLibrary)Native.loadLibrary("mylib", MyLibrary.class); 

    class MyStruct extends Structure { 
     public static class ByValue extends MyStruct implements Structure.ByValue {} 
     public int i; 
     public double a[3]; 
     protected List getFieldOrder() { 
      return Arrays.asList("i", "a"); 
     } 
    } 

    void mysub(MyStruct.ByValue arg); 
} 
+0

спасибо, это здорово ... Я вижу, что здесь есть много примеров: http: //www.eshayne.com/jnaex/index.html? Example = 3 Я был слишком сосредоточен на взаимодействии с Fortran –

+0

Но я думаю, что вы должны реализовать 'getFieldOrder()' в приведенном выше коде, иначе я получаю ошибку компиляции (jna 4.2) –

Смежные вопросы