0

我有一些遗留代码,它们将本机数组复制到托管数组中:

float* nativeValues = new float[NumberOfSamples];
array<double>^ managedValues = gcnew array<double>(NumberOfSamples);

pin_ptr<double> pinnedValues = &managedValues[0];
for (int i = 0; i < managedValues->Length; i++)
{
    nativeValues[i] = (float) pinnedValues[i];
}

我无法重构它,Runtime::InteropServices::Marshal::Copy因为原始数组是双精度的,而目标是浮点数。

我的问题是我不明白为什么 pin_ptr。我不认为这是必要的,但它是一段关键的代码,我想在删除它之前确定。

您认为删除它是否安全?

4

1 回答 1

2

如果您要将pin_ptr作为double*.

void SomeUnmanagedAPI(double* data, int length);

// Example of where pin_ptr would be needed.
pin_ptr<double> pinnedValues = &managedValues[0];
SomeUnmanagedAPI(pinnedValues, managedValues->Length);

对于手动副本或 Marshal::Copy,不需要它。继续删除它,然后迭代 managedValues。

于 2013-04-22T13:34:36.367 回答