Есть дллка на C++. в C# вызывается функция из этой dll — ReturnString().
Функция должна вернуть строку.
Люди советуют — выделить память в C# под строку и передать указатель в ReturnString. Там заполнить буффер. Но тут придется делать два вызова, потому что размер строки неизвестен...
еще вариант:
Выделение и удаление в C++. То есть после вызова функции ReturnString, обработать строку, а затем вызвать другую функцию, скажем, ClearStr из длл, которая освободит память.
или, как сделано сейчас:
в С++ заведена глобальная Std::string. В которую записывается строка, а в C# возвращается string.c_str(). Перед каждым вызовом ReturnString делать string.clear() и писать в переменную заново...
Все ли варианты валидны?