Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.21;
Скачать: CL | DM;

Вниз

ShortString в С++   Найти похожие ветки 

 
@!!ex ©   (2009-04-28 19:39) [0]

Делаю софтину, которая умеет подключать плагины.
Одна из функций возвращает ShortString.
Нужно будет делать интерфейс и для плагино писателей на С++, вот и возник вопрос, как в С++ обозначить функцию возвращающую ShortString.


 
Rouse_ ©   (2009-04-28 20:03) [1]

struct ShortString {
   unsigned char Length;
   char[255] Data;
}


 
@!!ex ©   (2009-04-28 20:18) [2]

спасибо! про длину я забыл, хотел просто массив объявить. хорошо что спросил. :)


 
palva ©   (2009-04-28 23:10) [3]

Хорошо бы для нулевого байта предусмотреть место
char[256] Data;
Мало ли, в среде си пригодится.


 
DVM ©   (2009-04-28 23:14) [4]


> @!!ex ©   (28.04.09 19:39)  

Может лучше все же избавиться от именно ShortString? А делать как в WinAPI?


 
Германн ©   (2009-04-29 00:50) [5]


> DVM ©   (28.04.09 23:14) [4]
>
>
> > @!!ex ©   (28.04.09 19:39)  
>
> Может лучше все же избавиться от именно ShortString? А делать
> как в WinAPI?
>

+1


 
Rouse_ ©   (2009-04-29 09:26) [6]


> Хорошо бы для нулевого байта предусмотреть место
> char[256] Data;
> Мало ли, в среде си пригодится.

А Length там для чего? :) Если делать char[256] - то размерчик поплывет :)


 
@!!ex ©   (2009-04-29 10:18) [7]

> [4] DVM ©   (28.04.09 23:14)

Чем лучше?


 
DVM ©   (2009-04-29 11:15) [8]


> @!!ex ©   (29.04.09 10:18) [7]


> Чем лучше?

Тем что писателям плагинов на разных языках придется совершать меньше телодвижений. Да и привычнее это имхо. Это во-первых.

Во-вторых, я все же, считаю неправильным поход, когда такая функция сама возвращает строку, сама же выделяя под нее память и т.д. Мне кажется вернее передавать в функцию указатель на буфер в памяти, в котором уже распределено места ровно столько сколько надо для приема строки. А сколько надо распределить, может вернуть та же функция при передаче в нее nil вместо указателя на буфер. Может так сложнее, но так имхо универсальнее.


 
Anatoly Podgoretsky ©   (2009-04-29 11:30) [9]

> DVM  (29.04.2009 11:15:08)  [8]

При ShortString по определению никакой памяти в ран тайм не выделяется, она по определению должна быть выделена на этапе компиляции. В остальном согласен.


 
@!!ex ©   (2009-04-29 11:59) [10]

> При ShortString по определению никакой памяти в ран тайм
> не выделяется, она по определению должна быть выделена на
> этапе компиляции.

Поэтому и ShortString, а не String.


> [8] DVM ©   (29.04.09 11:15)

1) Как раз таки наоборот. Подключаешь интерфейс, вызываешь функцию, получаешь строку. На любом языке. В случае же буффера, ты должен еще этот буффер создать и выделить под него место. Что требует больше телодвижений. То что использование ShortString - Это не стандарту - согласен, но зато это удобнее. И самое главное - быстрее. Потому что функции возвращающие строку - сами довольно не быстрые, им нгужно эту строку найти в списке(пускай и не большой список, но всеже)и вернуть. Для того, чтобы узнать нужный размер - все равно надо найти и вернуть. Конечно можно выделять заранее нмого места, но чем это лучше использования ShortString?

2) Анатолий уже ответил. Если бы речь шла о выделении памяти, то и речи бы не было. Суть как раз в том, что памятью программист вообще может не управлять. Все делается в рамках стандартных возможностей по автоматическому созданию и очистке.


 
DVM ©   (2009-04-29 12:04) [11]


> Anatoly Podgoretsky ©   (29.04.09 11:30) [9]


> При ShortString по определению никакой памяти в ран тайм
> не выделяется

Да я знаю, я просто обобщил так сказать подход


 
DVM ©   (2009-04-29 12:06) [12]


> @!!ex ©   (29.04.09 11:59) [10]


> 1) Как раз таки наоборот.

Ну может быть. Если ты 100% уверен, что потом длинных строк не появится, оставляй как есть. Иначе потом переделать будет уже невозможно, т.к. будет понаписано куча плагинов.


 
Anatoly Podgoretsky ©   (2009-04-29 13:13) [13]

Ничего не сказано о природе плагинов, но длинные строки явно не очень подходят. Или ShortString или PChar - второе явно предпочтительнее, для плагинов на любом языке.



Страницы: 1 вся ветка

Текущий архив: 2009.06.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
15-1239913802
Юрий
2009-04-17 00:30
2009.06.21
С днем рождения ! 17 апреля 2009 пятница


2-1241599233
Slow
2009-05-06 12:40
2009.06.21
Закрашивание записей в Gridе по условию


15-1239631596
пикассо
2009-04-13 18:06
2009.06.21
delphi to builder


2-1241528409
Knob
2009-05-05 17:00
2009.06.21
Нажатие кнопки


2-1241083839
LDV
2009-04-30 13:30
2009.06.21
Вставка из Clipboard