Указатели и буферы фиксированного размера можно использовать только в небезопасном контексте
у меня есть 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
это, вероятно, стоит прочитать, я нашел его довольно полезным.