へのFortranから構造化データ・タイプを渡します。は、私は、ポインタ(8 *実際のポインタデータ型)を含む大量のデータが含まれているFortranで構造化された型を持つC++
私はいくつかのFortranルーチンのC++ APIを開発しています。私はFortranルーチンへの呼び出しの間に構造の内容を保持する必要があります。
私はC++側にアドレスをLOCを使用して渡す構造体のアドレスを取得する方法について考えていました。 FortranのルーチンがC++から再び呼び出され、アドレスはバックのFortranへ渡される
は、何とか元の構造にそれを型キャストして、計算のためにそれを使用します。
これを達成するために私はどのようなアプローチをとることができますか?
ありがとうございました。
EDIT:私のコードのコメント/提案に基づきます。 C_LOCが呼び出されるとプログラムがクラッシュします(C_LOCへの呼び出しをコメントアウトするとプログラムがクラッシュしません)。
subroutine TEST(a,b,c,d,e,mystruct,ier) BIND(C, NAME='TEST')
use mymodule
USE, INTRINSIC :: ISO_C_BINDING
implicit none
TYPE(C_PTR) :: mystruct
TYPE(mymodule), TARGET :: origstruct
INTEGER :: a, b, c
DOUBLE PRECISION :: d(*), e(*)
INTEGER :: ier
!Do something with origstruct and other arguments
print *, 'here 1'
mystruct= C_LOC(origstruct)
print *, 'here 2'
end
は、これはやや広く、おそらく、もう少し具体的なあなたが考えている内容に作られているから利益を得るであろう。つまり、Fortranの派生型は完全に不透明で、C++側に関しては満足していますか?あなたがいるなら、潜在的な簡単な答えを示唆している。 – francescalus
はい、私はFortranがC++に完全に不透明であることに満足しています。構造体の内容を知る必要はなく、構造体のハンドルを維持して後続の呼び出し間で再利用できるようにする必要があります。 –
実際のコードを見る方がはるかに良いでしょう。実際には、Fortranでの型キャスティングは必要ありません。 Fortranは単にアドレスを取得し、構造体が参照渡しされると解釈します。 C++では 'void * 'になります。 –