我正在为 Windows Phone 8 编写代码,并且正在尝试了解跨越 C#/C++ 代码障碍的来龙去脉。
假设我在 C# 端有两个数组,float[]
我们将它们称为. 我想对它们进行逐个元素的添加。由于这是在实时系统中,(音频处理)我不想冒险在我的音频处理例程中进行分配和释放,所以我想要一些类似. 由于我明确地学习如何从 C# 调用 C++,所以我不会只用 C# 编写 for 循环,我会用 C++ 编写它,如下所示:data1
data2
data1[i] += data2[i]
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
是一个空指针,无论传递的值如何在。我相信我想改用ref
关键字,但我不知道如何使用 Windows Phone 8 SDK 来做到这一点。
关于如何在ref
此处使用关键字或如何最好地构建它的建议将不胜感激,因为我仍在学习 C# 的最佳实践。谢谢你们!
编辑:错误信息
如果我只是尝试libfilter.mixIn( ref data1, data2 );
从我的 C# 代码中使用,我会得到以下信息:
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