如何在 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)
好吧,这有点荒谬,但我设法理解我最终不得不初始化 Array
s,因为 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)
我有一些代码是用 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)
好吧,这有点荒谬,但我设法理解我最终不得不初始化 Array
s,因为 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)