如何像在 VBA 中一样获得 Single 的 2 维数组 VB.NET?



我有一些用VBA编写的代码,它使用我编程的特定环境的功能,该函数给定一些空的,不是固定维度的Single数组,并将它们返回2维并填充数据。它还生成一个Variant作为输出。
VBA 代码是:

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

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

我成功地设法在一段 VB.NET 代码中解决了相同的例程,方法是编写一种解决方法,将我的代码"链接"到上述环境并使用其自己的脚本例程。

我 VB.NET 代码是:

Dim vDummy As Object
Dim RealLev1(,) As Single, ImagLev1(,) As Single
vDummy = NSI.FFPOL1Array(RealLev1, ImagLev1) 

NSI是"脚本例程对象",它与许多其他函数和子例程一起工作。

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

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

因此,我试图将我的数组DimSystem.ArraySingle的instad,但由于类型冲突,这总是失败。我做错了什么?

好吧,这有点荒谬,但我设法理解我最终必须初始化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)

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

Set vDummy = NSI.FFPOL1Array(RealLev1, ImagLev1) 

最新更新