今、私はここでほぼ毎日質問をしているようです。それが良いことなのか悪いことなのかわかりません...
今日の「Flavor-Of-The-WTF」には、NIMeasurementStudioオブジェクトの関数を使用するときの私の完全で完全な無知が含まれています。これまでのほとんどの質問と同様に、これは、.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()
。元のプログラムでは、それが何をするかについては問題なく機能します。確かに、元のプログラムに関する私の親密な知識は、最近プロジェクトを取り上げたので平凡であり、プログラミングは数年しかありません(そして、機械工学は何年もありません。プログラマーは機械エンジニアであり、アプリケーション自体でした。機械出力用の測定ツール)。
コードを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
。
ええと...おなじみですね。2つの変数のインスタンス化に変更double[]
すると、最終的にコンパイラーにエラーの生成を停止させます。Object
しかし...関数を実行すると、Type Mismatch
エラーが発生します。
ここからどこへ行くのか本当にわからない。インターネット上にあるMeasurementStudioを使用したC#のプログラミングに関する情報はほとんどまたはまったくありません。あったとしても、私が思っているよりもはるかに簡単な解決策だと思います。歴史は、私が理解できないバグがあるとき、それはほとんど常に愚かなことであると私に教えてくれました。