Как мне маршалировать структуру, содержащую массив int неизвестного размера?

#c# #c #marshalling

#c# #c #маршалирование

Вопрос:

У меня есть c-структура, которую я хочу вернуть из c-функции в c #, и эта структура содержит массив int и длину. Итак, в основном

 struct MyStruct
{
int *arr;
int size;
} 
  

Как я должен выделить arr в c, чтобы гарантировать, что он может быть освобожден в c #. И как мне украсить соответствующую структуру в c #, чтобы сделать возможным маршалинг?

Комментарии:

1. Для взаимодействия с C # вы используете C, C , C / CLI, C / CX, C с WRL или C / WinRT? Вы используете . NET или Mono? Вы используете Windows, Macintosh или Linux?

2. Я работаю на C #, а вызываемая библиотека — C , но я вызываю только функции в стиле C. Я использую visual studio и .NET standard.

Ответ №1:

Вы не можете. Вы должны выделять и освобождать память с помощью одной и той же библиотеки времени выполнения.

Комментарии:

1. Вы можете выделять память в коде C, использовать ее в C # И освобождать память в коде C (вызывая пользовательскую функцию).

2. Спасибо, тогда, я думаю, мне не нужно искать дальше. Я надеялся, что для структур должно быть что-то вроде SizeParamIndex: learn.microsoft.com/en-us/dotnet/api /…

3. @AndersG Что заставляет вас думать, что SizeParamIndex не работает для структур?

4. Можно ли использовать это для структур? Как?