Вверх ↑
Ответов: 4622
Рейтинг: 746
#1: 2014-12-05 12:42:51 ЛС | профиль | цитата
[offtop]
CriDos писал(а):
указатель на начало массива из char в стеке, т.е. не сделали нормально и не выделили из кучи место под массив, а взяли и вернули указатель на строку из стека...
А в стек оно откуда попадет? Как я понимаю, тут используется та особенность, что строковые константы жестко прописываются в исполняемом файле, и к тому же константы не подвергаются механизму подсчета ссылок. Поэтому "массив из char" всё же лежит не в стеке и не уничтожается после выхода из процедуры, поэтому его адреса остаются валидными.

А вообще, в таких случаях вызывающий сам готовит буфер, передаёт его адрес в dll, а она туда копирует нужные данные. Так работает Windows API. Ну и ещё в dll может быть возможность предварительно узнать требуемый размер буфера. Также dll может сама выделять буфер, но предоставлять функцию для его освобождения, когда данные больше не нужны.[/offtop]
карма: 26

0