Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
2-1241207260
бульдозер
2009-05-01 23:47
2009.06.21
CreateProcess определить готовность запускаемого приложения


2-1241427327
ford
2009-05-04 12:55
2009.06.21
Ошибка после обращения к Pointer как к целому


15-1239967211
passlight
2009-04-17 15:20
2009.06.21
Кому-нибудь нужны книги по программированию (базы данных, .NET)?


11-1202864756
Jon
2008-02-13 04:05
2009.06.21
Applet and Forms?


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский