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

Вниз

динамический Buffer   Найти похожие ветки 

 
Alexis   (2004-02-29 12:10) [0]

допустим, объявляя в
var buffer:array[0..200] of char;
создаем довольно большой буфер для принятия значения при вызове какой-либо функции, например
GetWindowsVersion(buffer);
strpas(buffer);

Однако может возникнуть переполнение.Каким образом можно создавать буфер динамической длины, а затем обрабатывать его.
Заранее благодарю.


 
Плохиш   (2004-02-29 12:18) [1]

GetMem напрмер


 
Maxud   (2004-02-29 12:19) [2]

buffer: array of Char;
...
SetLength(Buffer, 200);
buffer[4] := "F";


 
Anatoly Podgoretsky   (2004-02-29 12:20) [3]

Такой функции нет
var buffer: array of char;


 
Alexis   (2004-02-29 12:35) [4]


> Такой функции нет

Я понимаю что нет.По-моему в этой ситуации надо указатели использовать?


> SetLength(Buffer, 200);

Вопрос внимательно почитайте :)


 
Defunct   (2004-02-29 13:50) [5]

Alexis © (29.02.04 12:35) [4]
>> SetLength(Buffer, 200);

> Вопрос внимательно почитайте :)

А что не так?
Вы же можете написать, SetLength(Buffer, NewSize); где NewSize - переменная с требуемым значением.


 
Alexis   (2004-02-29 14:25) [6]


> А что не так?
> Вы же можете написать, SetLength(Buffer, NewSize); где NewSize
> - переменная с требуемым значением.

K primeru, ja citaju iz reestra znacenije funkcijej, kotoroja peredaet znacenije v buffer.Ja ved zaranee ne znaju kakoj dliny budet znacenije.


 
Romkin   (2004-02-29 14:26) [7]

Строку использовать. Что все уперлись в массив?
Кстати, что за функция GetwindowsVersion? Что-то я такой не знаю.
Как правило, функции API возвращают длину буфера. Или есть парная, например, GetWindowText и GetWindowTextLength. Использование простое:

var
S: string;
Len: integer;

Len := GetWindowTextLength(Handle);
if Len = 0 then
raiseLastOSError;
SetLength(S, Len);
if GetWindowText(Handle, PChar(S), Len) = 0 then
raiseLastOSError;

//и тд...


 
Verg   (2004-02-29 14:31) [8]

Практически все подобного сорта функции умеют сообщать, что размер заданного буфера недостаточен. Мало, того, большинство при этом сообщают "сколько надо".
Либо работают с известными максимальными значениям размеров.

Так что, как говорится, с больной головы на здоровую.



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

Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.012 c
1-43518
rezak
2004-02-28 18:35
2004.03.14
вопрос с лабелом


1-43578
Ш-К
2004-02-27 15:20
2004.03.14
Как из события передать указатель на объект в мой обработчик?


3-43270
Zilog
2004-01-23 13:25
2004.03.14
DBGrid - напонятный глюк.


4-43950
Mohamed
2004-01-07 00:12
2004.03.14
Pomogite c Stop Watch


4-43947
kor@lex
2004-01-07 12:55
2004.03.14
Caption Bar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский