如何在 VB.NET 中获取与 VBA 完全相同的 Single 的二维数组?

How to obtain 2 dimensional arrays of Single in VB.NET exactly like in VBA?

我有一些代码是用 VBA 编写的,它使用了我在其中编程的特定环境的函数,给定了一些空的、非固定维度的 Single 数组,返回二维和充满了数据。它还会生成 Variant 作为输出。
VBA代码是:

Dim vDummy As Variant
Dim RealLev1() As Single, ImagLev1() As Single

vDummy = FFPOL1Array(RealLev1, ImagLev1)

现在,我确定 FFPOL1Array 是用 FORTRAN 编写的例程,但我无法通过任何方式访问其代码。

我通过编写变通方法成功地解决了 VB.NET 代码段中的相同例程,方法是 "links" 我的代码适用于上述环境并使用其自己的脚本例程。

我的 VB.NET 代码是:

Dim vDummy As Object
Dim RealLev1(,) As Single, ImagLev1(,) As Single

vDummy = NSI.FFPOL1Array(RealLev1, ImagLev1) 

NSI 是 "scripting routines object",它与许多其他函数和子程序一起工作。

遗憾的是,上面的代码不起作用,因为(根据调试器)类型冲突。所以我检查了 类-Explorer 并发现 FFPol1Array class 被定义为:

get_FFPOL1Array(ByRef System.Array, ByRef System.Array) As Object
set_FFPOL1Array(ByRef System.Array, ByRef System.Array, ByRef Object)

因此我尝试 Dim 我的数组作为 System.Array 而不是 Single 但这总是因为类型冲突而失败。我做错了什么?

正如@Nathan_Sav 所建议的,get_FFPOL1Array 正在返回一个对象,因此您需要使用 Set。

Set vDummy = NSI.FFPOL1Array(RealLev1, ImagLev1) 

好吧,这有点荒谬,但我设法理解我最终不得不初始化 Arrays,因为 FORTRAN 函数没有这样做:

Dim RealLev1 As Array = Array.CreateInstance(GetType(Single), 1, 1)
Dim ImagLev1 As Array = Array.CreateInstance(GetType(Single), 1, 1)

这完成了工作。更好的是:

Dim RealLev1(,) As Single = Array.CreateInstance(GetType(Single), 1, 1)
Dim ImagLev1(,) As Single = Array.CreateInstance(GetType(Single), 1, 1)