Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;
}


Наверх

Титульная страница Поиск, карта сайта Написать письмо