![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 08.09.2007
Сообщений: 15
|
![]()
Может ли функция возвращать переменную, типа, TStrings или TStringList.
Если может, то каким образом? Спасибо. |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Ну в Паскале я не помню есть ли вообще TStringList, а вот в Делфи функция вполне может вернуть TStringList, как и всякий другой результат любого типа
например function a(var s:array of string):TStringList;
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
![]()
Лучше сделать чтобы функция возвращала указатель на эту переменную. Иначе при возвращении копируется вся эта переменная.
А так только пер-я типа pointer,которая весит меньше. Код:
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 08.09.2007
Сообщений: 15
|
![]()
procedure TfMain.Button8Click(Sender: TObject);
begin Memo1.Lines:=LineSting; end; function TfMain.LineSting: TStringList; var sstring: TStringList; begin sstring := TStringList.Create; sstring.Add('one'); sstring.Add('two'); Result:=sstring; sstring.Free; end; В этом случае выдаёт ошибку. Про pointer: 1. Если к функции обращаются хаотино (например, по TTimer), у каждого вызова функции будет свой Pointer? 2. Если 1 - да!, то как очищается уже не нужные pointer из памяти? |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 26.04.2007
Сообщений: 440
|
![]()
1.В делфи для работы со строками есть модуль ShareMem. Может в паскале есть что нить подобное, т.к. ошибки не вижу.
2. а -да б- процедура dispose(p);p: pointer. |
![]() |
![]() |
![]() |
#6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
I'm learning to live...
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 08.09.2007
Сообщений: 15
|
![]()
Delphi 6 - sp3. что-то я подзапарил с Pascal.
А если free не писать, как я память освобожу. за p: pointer. спасибо, тоже. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 298
|
![]()
Перепишем так
procedure TfMain.Button8Click(Sender: TObject); begin LineSting(Memo1.Lines); end; procedure TfMain.LineSting(var AList: TStringList); var sstring: TStringList; begin if AList = nil then Exit; sstring := TStringList.Create; try sstring.Add('one'); sstring.Add('two'); Alist.Assign(sstring); finally sstring.Free; end; end;
Не надо ничего усложнять. Все достаточно тривиально.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с TStrings | Никки | Общие вопросы Delphi | 11 | 16.02.2008 20:42 |
Функции | Vinni_puh | Microsoft Office Excel | 1 | 20.12.2007 05:51 |
как правильно работать с массивом TStrings | Air | Общие вопросы Delphi | 6 | 19.12.2007 17:55 |
Функции | furian | Общие вопросы C/C++ | 3 | 18.12.2007 12:48 |