ILGenerator: Как использовать неуправляемые указатели? (Я получаю VerificationException)

Я делаю программу синтеза звука, в которой пользователь может создавать свои собственные звуки, создавая композицию на основе узлов, создавая генераторы, фильтры и т. Д.

Программа компилирует узлы на промежуточный язык, который затем преобразуется в MSIL через ILGenerator и DynamicMethod

Он работает с массивом, в котором хранятся все операции и данные, но это будет быстрее, если я смог использовать указатели, чтобы позволить мне выполнять некоторые операции на битовом уровне позже

PD: скорость очень важна!

Я заметил, что у одного переопределения конструктора DynamicMethod есть атрибут метода, который является UnsafeExport, но я не могу его использовать, потому что единственная допустимая комбинация - Public + Static

Это то, что я пытаюсь сделать, который выдает мне VerificationException: (просто чтобы присвоить значение указателю)

//Testing delegate
unsafe delegate float TestDelegate(float* data);

//Inside the test method (wich is marked as unsafe) 

        Type ReturnType = typeof(float);
        Type[] Args = new Type[] { typeof(float*) };

        //Can't use UnamangedExport as method atribute:
        DynamicMethod M = new DynamicMethod(
            "HiThere",
            ReturnType, Args);

        ILGenerator Gen = M.GetILGenerator();

        //Set the pointer value to 7.0:
        Gen.Emit(OpCodes.Ldarg_0);
        Gen.Emit(OpCodes.Ldc_R4, 7F);
        Gen.Emit(OpCodes.Stind_R4);

        //Just return a dummy value:
        Gen.Emit(OpCodes.Ldc_R4, 20F);
        Gen.Emit(OpCodes.Ret);



        var del = (TestDelegate)M.CreateDelegate(typeof(TestDelegate));

        float* data = (float*)Marshal.AllocHGlobal(4);
        //VerificationException thrown here:
        float result = del(data);

Ответы на вопрос(1)

Ваш ответ на вопрос