2016-05-31 2 views
0

Javaから呼び出されるFortranサブルーチンのインタフェースを記述する必要があります。 Fortranサブルーチンのいくつかの引数は、派生型(カスタム型/構造体)です。それらを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

あなたが気にする種類の派生型/サブルーチンの例をいくつか挙げることができますか?いくつかの面では、すべてのことがより困難になります。 [そして、Cの相互運用可能なインターフェースを使って[tag:fortran-iso-c-binding]を見ることができます。 – francescalus

+0

@francescalus私が意味するものの例を追加しました –

+0

あなたの例が実際に型定義_outside_サブルーチンを参照してください)。 – francescalus

答えて

1

はい、JNAは、参照によってその値の両方によって集約型(Cでstruct)をサポートします。引数のデフォルトの規約は値による。

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

ありがとう、thats great ...ここにはたくさんの例があります:http://www.eshayne.com/jnaex/index.html?example = 3私はFortranとのインターフェースに重点を置いていました –

+0

しかし、上記のコードで 'getFieldOrder()'を実装する必要があります。それ以外の場合は、コンパイルエラーが発生します(jna 4.2) –

関連する問題