Редактирование и исправление: Для возвращаемых значений вызовов p / invoke «нормальный» метод не работает. Я так привык к нормальному, ref
и out
поведению, связанному с параметрами метода, что я предполагал, что возвращаемые значения будут работать аналогичным образом. Вот ссылка для решения проблемы возвращаемого значения:
Ошибка PInvoke при сортировке структуры со строкой
Вам нужно использовать StringBuilder
, только если вы передаете структуру методу C ++ в качестве параметра byref, а строка является буфером, который метод изменит. Для возвращаемого значения вам просто нужно указать тип строки, который в данном случае:
struct ManagedStruct
{
[MarshalAs(UnmanagedType.Lpstr)]
string s;
}
Помните, чтобы добавить свойство для предоставления строки, так как s
здесь является приватным (что нормально, поля должны быть приватными).