Я пытаюсь использовать pinvoke для маршалирования структуры C на C#. Хотя я могу маршалировать intptr, я не могу найти синтаксис для маршалирования двойного указателя. Оба указателя int и двойной указатель используются на стороне C, чтобы выделить массив из int или double.Как маршалировать двойной указатель?
Здесь C структура:
struct xyz
{
int *np; // an int pointer works fine
double *foo;
};
А вот с # класс:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class xyz
{
Intptr np; // works fine
// double *foo ??
}
Я не смог найти каких-либо инструкций о том, как MARC
IntPtr - это просто указатель: до void *; поэтому вы можете попробовать маршалинг «double * foo» как «IntPtr foo»; –
IntPtr не означает «указатель на целое число». MSDN: Тип IntPtr предназначен для целого числа, размер которого зависит от платформы. Он может указывать на любые данные. –
Уточнение: код C выполняет все выделение/освобождает память, поэтому сторона C# блаженно не знает об этом. – PaeneInsula