Маршал "char *" в C#

Попробуйте

[DllImport("your.dll", CharSet = CharSet.Ansi)]
string GetDir(StringBuilder path);

строка автоматически marshaling маршалируется в строку с marshal завершающим нулем, а с помощью .net-framework свойства CharSet вы сообщаете .net-framework Marshaller, что он должен pinvoke использовать ANSI, а не Unicode. Примечание. Используйте marshal строку (или System.String) для marshaling const char*, но StringBuilder dotnet для char*.

Вы также можете marshalling попробовать MarshalAs, как dotnet в this example.

.net

pinvoke

marshalling

2022-05-25T01:05:33+00:00