我有一个VB.net控制台应用程序,我在用fortran编写的dll中打开一个函数。我通过引用传递了3个数组。当他们从其他人那里回来时,他们都只调到了只有一个元素的数组。那个元素是0。
我在互联网上读到,在做这种事情时,最好只将数组的第一个元素传递给函数。我尝试将我的函数声明更改为接受单个元素而不是单维数组,现在数组在函数调用之前和之后的长度相同,但它们似乎根本没有变化,所以我不确定这是有效的。
任何人都有这样的问题或知道该尝试什么?任何帮助将不胜感激。
答案 0 :(得分:0)
FORTRAN函数只接收指针,无论它是数组还是单个值。
我不知道如何在VB.net中执行此操作,但尝试找到将指针发送到第一项的方法。
在C中,它将是:
double *a = ...;
fortran_func(a); // or...
fortran_func(&a[0]);
另外,确保发送正确类型的浮点(真实* 8与实际* 4,对于双精度和单精度)。 一旦进入FORTRAN,你将无法知道数组的大小,你需要假设它。
SUBROUTINE fortran_func(a)
real*8 a(16)
...
END
如果尺寸不是静态的,也许可以这样做
SUBROUTINE fortran_func(a,sz)
real*8 a(sz)
integer sz
...
END
然后将整数也作为指针发送。在C中它将是:
int sz=16;
fortran_func(a,&sz);