私はWindowsPhone8のコードを書いていますが、C#/C++コードの壁を越えることの詳細を学ぼうとしています。
float[]
C#側に2つの配列があるとしましょう。これらdata1
を、と呼びますdata2
。それらに要素ごとの加算を実行したいと思います。これはリアルタイムシステムであるため、(オーディオ処理)オーディオ処理ルーチン内で割り当てと割り当て解除を行うリスクを冒したくないので、の行に沿って何かが必要になりますdata1[i] += data2[i]
。ただし、C#からC ++を呼び出す方法を明示的に学習しているので、forループをC#で記述するだけでなく、次のようにC++で記述します。
void LibFilter::mixIn( Platform::Array<float>^ * data1, const Platform::Array<float>^ data2 ) {
auto outArray = (*data1);
// Don't do anything if we don't have matching lengths
if( data2->Length != outArray->Length )
return;
// Sum data2 into outArray (which is just a dereferenced data1)
for( unsigned int i=0; i<outArray->Length; ++i ) {
outArray[i] += data2[i];
}
}
これは私にはうまくいくようですが、私はC#プログラマーではなく、C ++プログラマーです。明らかに、これはout
C#のキーワードと一緒に使用する必要があります。つまり、data1
渡された値に関係なく、nullポインターです。代わりにキーワードを使用したいと思いますref
が、Windows Phone8SDKを使用してそれを行う方法がわかりません。
ここでキーワードを使用する方法ref
、またはこれを設計するための最良の方法についての提案は、私がまだC#でベストプラクティスを学んでいるので、非常に高く評価されます。皆さん、ありがとうございました!
編集:エラー情報
C#コードから使用しようとするとlibfilter.mixIn( ref data1, data2 );
、次のようになります。
error CS1502: The best overloaded method match for 'libfilter.LibFilter.mixIn(out float[], float[])' has some invalid arguments
error CS1620: Argument 1 must be passed with the 'out' keyword