从vb.net app传递数组通过fortran dll转向单个元素数组。我应该只传递第一个元素吗?

时间:2010-02-02 14:56:33

标签: vb.net arrays dll fortran

我有一个VB.net控制台应用程序,我在用fortran编写的dll中打开一个函数。我通过引用传递了3个数组。当他们从其他人那里回来时,他们都只调到了只有一个元素的数组。那个元素是0。

我在互联网上读到,在做这种事情时,最好只将数组的第一个元素传递给函数。我尝试将我的函数声明更改为接受单个元素而不是单维数组,现在数组在函数调用之前和之后的长度相同,但它们似乎根本没有变化,所以我不确定这是有效的。

任何人都有这样的问题或知道该尝试什么?任何帮助将不胜感激。

1 个答案:

答案 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);