小编Sta*_*tam的帖子

Fortran派生类型,包含可从C访问的指针

我有一个Fortran代码,其中包含许多包含指针的派生类型.我正在编写一个需要访问这些变量的C++代码.我不能在没有指针的情况下重写这些派生类型,因为它们在Fortran代码的数百个不同的地方使用.

以下是示例代码:

module simple
use  iso_c_binding

TYPE,bind(C) :: SIMPLEF
INTEGER :: A
INTEGER, POINTER :: B, C(:)
END TYPE SIMPLEF

end module simple
Run Code Online (Sandbox Code Playgroud)

我需要从C访问SIMPLEF派生类型.我知道我不能使用它,因为Fortran指针不能在派生类型中,如果它应该可以从C访问.有任何解决方法吗?

EXTENSION:作为前一个问题的扩展(由IanH解决),我已经派生出了具有成员派生类型的类型.示例如下:

TYPE COMPLEXF
  INTEGER :: X
  TYPE (SIMPLEF) :: Y
END TYPE COMPLEXF
Run Code Online (Sandbox Code Playgroud)

我是否需要为每个Y成员创建COMPLEXF子程序,即SETY_A,QUERYY_A,SETY_B,QUERYY_BSIZE,QUERYY_B等?或者有更好的方法来解决这个问题吗?

c fortran pointers derived-types fortran-iso-c-binding

3
推荐指数
1
解决办法
762
查看次数

将动态2D数组从C++传递到Fortran并返回

在C++和Fortran之间传递一个固定的2D数组工作正常,但是我编写的程序不是这样,它将2D动态数组从C++传递给Fortran.

C++方面

extern "C" {void array2d_(double **, int *, int *); }
using namespace std;
int main()
{
double **array;
int nx=3;
int ny=2;
int i,j;
cout << "Passing dynamic array from C to Fortran\n";
array = (double **) malloc(nx * sizeof(double *));
if(array == NULL)
        {
        fprintf(stderr, "out of memory\n");
        exit;
        }
for(i = 0; i < nx; i++)
        {
        array[i] = (double *) malloc(ny * sizeof(double));
        if(array[i] == NULL)
            {
            fprintf(stderr, "out of memory\n");
            exit;
            }
        }
for(i …
Run Code Online (Sandbox Code Playgroud)

c++ arrays fortran 2d fortran-iso-c-binding

2
推荐指数
1
解决办法
967
查看次数

标签 统计

fortran ×2

fortran-iso-c-binding ×2

2d ×1

arrays ×1

c ×1

c++ ×1

derived-types ×1

pointers ×1