Ответ 1
Ответ OregonGhost корректен только в том случае, если char *, возвращаемый из GetDir, либо выделен в HGlobal, либо LocalAlloc. Я не помню, какой из них, но CLR будет считать, что любой тип возвращаемого типа из функции PInvoke был выделен одним или другим.
Более надежным способом является возвращение GetDir в значение IntPtr. Затем вы можете использовать любую из функций Marshal.PtrToStringAnsi, чтобы получить строковый тип. Это также дает вам гибкость освобождения строки в соответствии с вашим выбором.
[DllImport("your.dll", CharSet = CharSet.Ansi)]
IntPtr GetDir(StringBuilder path);
Можете ли вы дать нам другие подсказки относительно поведения GetDir? Изменяет ли входную строку? Каким образом возвращается значение, которое возвращается? Если вы можете указать, что я могу дать гораздо лучший ответ.