Also gut, ich weiß, wie man normalerweise einen Zeiger deklariert:
void SomeFunction(array<float> ^managedArray)
{
pin_ptr<float> managedArrayPtr = &managedArray[0];
}
Dies funktioniert gut, außer wenn managedArray keine Elemente enthält. In diesem Fall wird eine IndexOutOfRangeException ausgelöst.
In C# können Sie dies tun:
void SomeFunction(float[] managedArray)
{
fixed (float* managedArrayPtr = managedArray)
{
}
}
Dies erfordert keinen Speicherzugriff und funktioniert auch, wenn managedArray leer ist. Muss ich wirklich überall, wo ich Zeiger auf verwaltete Arrays verwende, die Anzahl der Elemente überprüfen, oder hat C++/CLI eine Möglichkeit, dies wie C# zu tun? Es sollte die 'lea'-Anweisung in ASM verwendet werden, die keinen Speicherzugriff erfordert.
Jede Hilfe ist sehr willkommen!