好像我现在几乎每天都在这里问一个问题。我不确定这是好事还是坏事……
今天的“Flavor-Of-The-WTF”涉及我在使用 NI Measurement Studio 对象中的函数时完全无知。与我之前的大多数问题一样,这是关于一个实习项目,我的任务是在 .Net Framework 2.0 中将一个 VB6 项目翻译成 C#。
原始的 VB 代码如下所示:
Public Sub FFT(ZData() As Single, FFTData() As Single)
Dim realdata As Variant
Dim imgdata As Variant
// (... Some unrelated other code in here ...)
// Here we pass three variables to a NI CWDSP object's ReFFT function
CWDSP1.ReFFT ZData, realdata, imgdata
// (... More unrelated code ...)
End Sub
我有一次停留在 MsgBox 中,以查看 realdata 和 imgdata 是如何被解释的。他们都是Double()
s。它在原始程序中工作得很好。诚然,我对原始程序的了解只是平庸,因为我最近拿起了这个项目,并且只有几年的编程经验(没有多年的机械工程。程序员是机械工程师,应用程序本身机器输出量的测量工具)。
将代码转移到 C# 中,我尝试将其重写为:
private void FFT(float[] ZData, float[] FFTData){
double[] realData = new double[1000];
double[] imgData = new double[1000];
// (... Unrelated intermediate code ...)
DSP.ReFFT(ZData, realData, imgData);
// (... Unrelated intermediate code ...)
}
如您所见,我开始的方式与原始 VB 基本相同。出现以下错误:Cannot Convert double[] to ref object
嗯,那不好。所以我尝试了:DSP.ReFFT(ZData, ref realData, ref imgData);
只为返回:Cannot Convert ref double[] to ref object
所以我做了我认为显而易见的事情。我将 realData 和 imgData 装箱到object
s 中,并将它们传递给函数。然而,它并不太喜欢那个。如果我没有传递新对象,ref
它坚持我需要传递它们。 ref
如果我用 传递它们ref
,它会给我错误:
Cannot Convert ref double[] to ref object
.
咦……似曾相识。当我更改double[]
为Object
两个变量的实例化时,我终于让编译器停止产生错误。但是......当我运行该函数时,我得到一个Type Mismatch
错误。
我真的不知道我从这里去哪里。互联网上几乎没有关于使用 Measurement Studio 进行 C# 编程的信息。即使有,我相信解决方案比我预期的要简单得多。历史告诉我,当有一个我无法弄清楚的错误时,它几乎总是愚蠢的。