Эта функция в Oculus SDK дает код ошибки 0xc0000005:C# сортировочных структура массива - FatalExecutionEngineError
[DllImport(LibFile)]
private static extern void ovrHmd_GetRenderScaleAndOffset(ovrFovPort fov,
ovrSizei textureSize,
ovrRecti renderViewport,
[MarshalAs(UnmanagedType.LPArray, SizeConst = 2)]
[Out] out ovrVector2f[] uvScaleOffsetOut);
Никакие другие функции PInvoke не бросать ошибки, но я думаю, что это один по-другому, потому что выходной массив. На самом деле есть еще одна функция, которая возвращает массив, и это дает ту же ошибку:
[DllImport(LibFile)]
private static extern void ovrHmd_GetEyeTimewarpMatrices(IntPtr hmd, ovrEyeType eye, ovrPosef renderPose,
[MarshalAs(UnmanagedType.LPArray, SizeConst = 2)]
[Out] out ovrMatrix4f_Raw[] twnOut);
Вот являются Struct декларации:
[StructLayout(LayoutKind.Sequential)]
public struct ovrVector2f
{
public float x, y;
}
[StructLayout(LayoutKind.Sequential)]
public struct ovrMatrix4f_Raw
{
public float m00;
public float m01;
public float m02;
public float m03;
public float m10;
public float m11;
public float m12;
public float m13;
public float m20;
public float m21;
public float m22;
public float m23;
public float m30;
public float m31;
public float m32;
public float m33;
}
Глядя на источник SDK, я знаю, по крайней мере ovrHmd_GetRenderScaleAndOffset выглядит довольно скучно, я не могу представить, что ошибка произошла из SDK.
Я чувствую, что мне нужно указать размеры где-нибудь в сигнале функции? И мне интересно, ограничены ли они выходными параметрами или любыми параметрами «массива структуры».
4.5.2 имеет поддержку Simd и векторные классы для поддержки. – Jay
Да, это очень редко заканчивается. Вы говорите марсоллеру pinvoke, чтобы скопировать собственный массив и уничтожить его. Последний неизменно бомбит. Остается только надеяться, что объявление неверно, используйте простой атрибут 'ovrVector2f [] uvScaleOffsetOut', no out. И передайте массив, достаточно большой. –