我有一个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之间传递一个固定的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)