Указатели и буферы фиксированного размера можно использовать только в небезопасном контексте

у меня есть 2 функции в классе и получение ошибки при вызове функции ParseBits (), т. е. "int num_elements = ParseBits(bits, buffer); "из-за аргумента" буфер "я передаю"public int ParseBits(string bits, int* buffer)":

3 ответов


возможно, я пропустил это, но вы, похоже, не делаете ничего, что на самом деле требует использования int*. Почему бы просто не передать ему массив int и изменить подпись функции ParseBits на:

public int ParseBits(string bits, int[] buffer)

и удалить unsafe{ ... } блоки в целом.


вам нужно заключить свою функцию, используя необработанные указатели в unsafe блок.

unsafe 
{
 //your code
}

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

любые функции, использующие небезопасный код, просто должны быть объявлены с ключевым словом "unsafe".
Например:

static unsafe void myFunction(int* myInt, float* myFloat)  
{
    // Function definition
}

лично я пытался сделать это при создании класса-оболочки.
Для тех, кто заинтересован, это в конечном итоге выглядит примерно так:

using System.Runtime.InteropServices;

namespace myNamespace
{
    public class myClass
    {
        [DllImport("myLib.so", EntryPoint = "myFunction")]
        public static extern unsafe void myFunction(float* var1, float* var2);
    }
}

Theres много большой информации в MSDN " небезопасно Код Tutorial":
https://msdn.microsoft.com/en-us/library/aa288474(v=vs. 71).aspx

это, вероятно, стоит прочитать, я нашел его довольно полезным.