【问题标题】:Passing arrays through fortran dll from vb.net app turning to single element arrays. Should i pass only the first element?通过从 vb.net 应用程序转换为单元素数组的 fortran dll 传递数组。我应该只通过第一个元素吗?
【发布时间】:2010-02-02 14:56:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: vb.net arrays dll fortran


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      • 2017-04-18
      • 2018-05-10
      • 1970-01-01
      • 2012-06-12
      • 2014-04-08
      相关资源
      最近更新 更多