2015-08-18 8 views
0

Я немного новичок в небезопасной стороне C#, так что простите меня, если я пропущу что-то очевидное здесь.Не указывать указатель на тип указателя в фиксированном выражении

Я ищу через некоторый код, используя .NET Reflector, чтобы понять некоторые реализации реализации Oculus Rift в C#, но я получаю кучу ошибок, таких, как это:

CS0030 Ошибка Не удается преобразовать типа 'OVR.ViewScaleDesc' до 'OVR.ViewScaleDesc *

CS0030 Ошибка Невозможно преобразовать тип 'OVR.LayerHeader' до' OVR.LayerHeader *

следующим способом

public unsafe Result SubmitFrame(
     uint frameIndex, ref ViewScaleDesc viewScaleDesc, ref LayerHeader layer) 
{ 
    fixed (ViewScaleDesc* descRef = ((ViewScaleDesc*)viewScaleDesc)) 
    { 
     fixed (LayerHeader* headerRef = ((LayerHeader*)layer)) 
     { 
      IntPtr layerListPtr = new IntPtr((void*)headerRef); 
      return (Environment.Is64BitProcess ? 
        ovrHmd_SubmitFrame64(
         base.NativePointer, frameIndex, 
         new IntPtr((void*)descRef), ref layerListPtr, 1) : 
         ovrHmd_SubmitFrame32(base.NativePointer, frameIndex, 
         new IntPtr((void*)descRef), 
         ref layerListPtr, 1));// get_NativePointer() 
     } 
    } 
} 

Является ли отражатель неправильным кодом здесь или что я делаю неправильно?

+0

Являются конструкциями или классами 'ViewScaleDesc' и' LayerHeader'? –

+0

Я не уверен, если это так, но обратите внимание, что нет никакого слова, если исходный код был C# в первую очередь - вполне возможно, что он не имеет эквивалента C#. Обычно вы используете '&' для получения указателя на структуру, но я не уверен, что это работает с аргументом 'ref'. – Luaan

+0

@ Luaan Он работает с аргументом ref, если тип является 'struct'. В противном случае он не может получить управляемый указатель на класс C#. –

ответ

2

Просто опустите бросок. &viewScaleDesc будет работать.