Импорт функции и возврат строки
От: ZeBbra  
Дата: 23.07.10 11:10
Оценка:
Есть дллка на C++. в C# вызывается функция из этой dll — ReturnString().
Функция должна вернуть строку.

Люди советуют — выделить память в C# под строку и передать указатель в ReturnString. Там заполнить буффер. Но тут придется делать два вызова, потому что размер строки неизвестен...

еще вариант:
Выделение и удаление в C++. То есть после вызова функции ReturnString, обработать строку, а затем вызвать другую функцию, скажем, ClearStr из длл, которая освободит память.

или, как сделано сейчас:
в С++ заведена глобальная Std::string. В которую записывается строка, а в C# возвращается string.c_str(). Перед каждым вызовом ReturnString делать string.clear() и писать в переменную заново...

Все ли варианты валидны?
Re: Импорт функции и возврат строки
От: SuhanovSergey  
Дата: 23.07.10 11:17
Оценка: 2 (1) +1
Можно возваращать BSTR* а в C# пометить параметр как out и UnmanagedType.BStr. Думаю, в этом случае не потребуется освобождать что-либо руками, runtime всё сделает за вас. C++ dll-ке придётся выделять строку соотвестещей функцией (SysAllocString).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.