Вы должны добавить wireguard в качестве модуля вне дерева, и вы можете увидеть в этом разделе руководства , как создать соответствующий рецепт.
В слое poky есть несколько примеров, и вы можете найти пример модуля ядра .
Ответ OregonGhost только корректен, если символ* возвратился из GetDir, или выделяется в HGlobal или LocalAlloc. Я не могу помнить, какой, но CLR предположит, что любой строковый тип возврата от функции PInvoke был выделен с одной или другим.
А больше устойчивого пути состоит в том, чтобы ввести возврат GetDir, чтобы быть IntPtr. Затем можно использовать любого Маршала. PtrToStringAnsi функционирует для ухода строкового типа. Это также дает Вам th гибкость освобождения строки способом Вашего выбора.
[DllImport("your.dll", CharSet = CharSet.Ansi)]
IntPtr GetDir(StringBuilder path);
можно ли дать нам какие-либо другие подсказки относительно поведения GetDir? Это изменяет входную строку? Как значение, которое возвращено выделенное? Если можно обеспечить, что я могу дать намного лучший ответ.
Попробуйте
[DllImport("your.dll", CharSet = CharSet.Ansi)]
string GetDir(StringBuilder path);
, строка автоматически упорядочивается к завершенной нулем строке, и со свойством CharSet, Вы говорите Marshaller, что это должно использовать ANSI, а не Unicode.Примечание: Используйте строку (или Система. Строка) для символа константы*, но StringBuilder для char*.
можно также попробовать MarshalAs, как в этот пример .