Передача указателя на указатель на структуру в качестве параметра функции в C # - PullRequest
2 голосов
/ 23 ноября 2010

Как передать указатель на указатель на структуру в качестве параметра функции в C #?

Я пытаюсь использовать функцию из DLL, один из аргументов которой имеет двойной указатель. Например,

struct mystruct
{
   int a;
   char b;
};

[DllImport("mydll.dll")]
private static extern int func_name(int a, char b, mystruct** c);

Я думаю, правильный способ использовать указатель типа int *a - ref int a. Есть ли что-нибудь подобное для int **a?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Эквивалент CLR для указателя на указатель равен ref IntPtr.

IntPtr - указатель на целое число, и при передачеон ref, он передается по ссылке, что делает его указателем на указатель.

Вам также может понадобиться использовать Marshal.PtrToStructure метод для преобразования указателя в объект структуры.

Дополнительную информацию см. В разделе «Ручная сортировка» в нижней части этой статьи .

0 голосов
/ 23 ноября 2010

Я бы работал по-другому.
Любой указатель должен использоваться как

System.IntPtr

, и тогда я использовал бы

Marshal.PtrToStructure

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

...