Я пытаюсь использовать pinvoke для сортировки массива структур внутри другой структуры от C до C#. AFAIK, нет.
Итак, в структуре C я объявляю ptr для своего массива и malloc. Проблемы: 1) Как объявить эквивалент на стороне C#? 2) Как распределить и использовать эквивалент на стороне C#?Как использовать pinvoke для C struct array указатель на C#
//The C code
typedef struct {
int a;
int b; } A;
typedef struct {
int c;
// A myStruct[100]; // can't do this, so:
A *myStruct; } B;
//The c# code:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class A{
int a;
int b;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class B{
int c;
// can't declare array of [100] A structures...
?
}
[EDIT]: Как-то я неправильно то, что я прочитал в другом месте о фиксированном массиве объектов на C# стороне. И я может зафиксировать размер массива в C Так компилируется нормально, но затем я получаю «ссылка на объект не указывает на экземпляр объекта» при использовании:
data.B[3].a = 4567;
Так, чтение в другом месте о том, что может быть эта ошибка , Я добавил этот метод:
public void initA()
{
for (int i = 0; i < 100; i++) { B[i] = new A(); }
}
Снова скомпилировано ОК, но с той же ошибкой.
Вы пробовали 'A [] myStruct'? –
Это компилируется нормально. Но как я могу выделить хранилище и использовать его (я все еще изучаю C#). Благодарю. – PaeneInsula
просто любопытно: * почему * вы не можете использовать 'A myStruct [100];' in C? Это сделало бы намного проще на стороне C# ... –