我在Fortran中有一个结构化类型,其中包含大量数据,包括指针(实数* 8指针数据类型)。将结构化数据类型从Fortran传递到C++
我正在为某些Fortran例程开发C++ API。我需要结构的内容在调用Fortran例程之间保持不变。
我正在考虑使用loc获取结构的地址并将地址传递给C++端。
当再次从C++调用Fortran例程并将地址传回给Fortran时,不知何故将它转换为原始结构,然后将其用于计算。
我可以用什么方法来实现这个目标?
谢谢。
编辑:我的代码基于意见/建议。 当调用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
这有点宽泛,并且可能会因为您想到的细节而更具体一些而受益。也就是说,就C++方面而言,您对Fortran派生类型完全不透明是否满意?如果你是,那就暗示了一个潜在的简单答案。 – francescalus
是的,我很高兴Fortran对C++完全不透明。我不需要知道结构的内容,只需要一种方法来维护结构的句柄,以便在后续调用之间重用它。 –
看到实际的代码会好很多。 Fortran中不应该有任何必要的类型转换。 Fortran只会得到一个地址,它会将其解释为通过引用传递的结构。在C++中它将是一个'void *'。 –