![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ShortString в С++
@!!ex © (2009-04-28 19:39:00)Делаю софтину, которая умеет подключать плагины.
Одна из функций возвращает ShortString.
Нужно будет делать интерфейс и для плагино писателей на С++, вот и возник вопрос, как в С++ обозначить функцию возвращающую ShortString.
Anatoly Podgoretsky (2009-04-29 13:13:00) [1]Ничего не сказано о природе плагинов, но длинные строки явно не очень подходят. Или ShortString или PChar - второе явно предпочтительнее, для плагинов на любом языке.
DVM (2009-04-29 12:06:00) [2]
> @!!ex © (29.04.09 11:59) [10]
> 1) Как раз таки наоборот.
Ну может быть. Если ты 100% уверен, что потом длинных строк не появится, оставляй как есть. Иначе потом переделать будет уже невозможно, т.к. будет понаписано куча плагинов.
DVM (2009-04-29 12:04:00) [3]
> Anatoly Podgoretsky © (29.04.09 11:30) [9]
> При ShortString по определению никакой памяти в ран тайм
> не выделяется
Да я знаю, я просто обобщил так сказать подход
@!!ex (2009-04-29 11:59:00) [4]> При ShortString по определению никакой памяти в ран тайм
> не выделяется, она по определению должна быть выделена на
> этапе компиляции.
Поэтому и ShortString, а не String.
> [8] DVM © (29.04.09 11:15)
1) Как раз таки наоборот. Подключаешь интерфейс, вызываешь функцию, получаешь строку. На любом языке. В случае же буффера, ты должен еще этот буффер создать и выделить под него место. Что требует больше телодвижений. То что использование ShortString - Это не стандарту - согласен, но зато это удобнее. И самое главное - быстрее. Потому что функции возвращающие строку - сами довольно не быстрые, им нгужно эту строку найти в списке(пускай и не большой список, но всеже)и вернуть. Для того, чтобы узнать нужный размер - все равно надо найти и вернуть. Конечно можно выделять заранее нмого места, но чем это лучше использования ShortString?
2) Анатолий уже ответил. Если бы речь шла о выделении памяти, то и речи бы не было. Суть как раз в том, что памятью программист вообще может не управлять. Все делается в рамках стандартных возможностей по автоматическому созданию и очистке.
Anatoly Podgoretsky (2009-04-29 11:30:00) [5]> DVM (29.04.2009 11:15:08) [8]
При ShortString по определению никакой памяти в ран тайм не выделяется, она по определению должна быть выделена на этапе компиляции. В остальном согласен.
DVM (2009-04-29 11:15:00) [6]
> @!!ex © (29.04.09 10:18) [7]
> Чем лучше?
Тем что писателям плагинов на разных языках придется совершать меньше телодвижений. Да и привычнее это имхо. Это во-первых.
Во-вторых, я все же, считаю неправильным поход, когда такая функция сама возвращает строку, сама же выделяя под нее память и т.д. Мне кажется вернее передавать в функцию указатель на буфер в памяти, в котором уже распределено места ровно столько сколько надо для приема строки. А сколько надо распределить, может вернуть та же функция при передаче в нее nil вместо указателя на буфер. Может так сложнее, но так имхо универсальнее.
@!!ex (2009-04-29 10:18:00) [7]> [4] DVM © (28.04.09 23:14)
Чем лучше?
Rouse_ (2009-04-29 09:26:00) [8]
> Хорошо бы для нулевого байта предусмотреть место
> char[256] Data;
> Мало ли, в среде си пригодится.
А Length там для чего? :) Если делать char[256] - то размерчик поплывет :)
Германн (2009-04-29 00:50:00) [9]
> DVM © (28.04.09 23:14) [4]
>
>
> > @!!ex © (28.04.09 19:39)
>
> Может лучше все же избавиться от именно ShortString? А делать
> как в WinAPI?
>
+1
DVM (2009-04-28 23:14:00) [10]
> @!!ex © (28.04.09 19:39)
Может лучше все же избавиться от именно ShortString? А делать как в WinAPI?
palva (2009-04-28 23:10:00) [11]Хорошо бы для нулевого байта предусмотреть место
char[25 6] Data;
Мало ли, в среде си пригодится.
@!!ex (2009-04-28 20:18:00) [12]спасибо! про длину я забыл, хотел просто массив объявить. хорошо что спросил. :)
Rouse_ (2009-04-28 20:03:00) [13]
struct ShortString {
unsigned char Length;
char[255] Data;
}