Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2007, 16:42   #1
tebeen
Пользователь
 
Регистрация: 08.09.2007
Сообщений: 15
По умолчанию Функции и TStrings

Может ли функция возвращать переменную, типа, TStrings или TStringList.

Если может, то каким образом?

Спасибо.
tebeen вне форума Ответить с цитированием
Старый 17.09.2007, 17:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну в Паскале я не помню есть ли вообще TStringList, а вот в Делфи функция вполне может вернуть TStringList, как и всякий другой результат любого типа

например function a(var s:array of string):TStringList;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2007, 17:08   #3
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Лучше сделать чтобы функция возвращала указатель на эту переменную. Иначе при возвращении копируется вся эта переменная.
А так только пер-я типа pointer,которая весит меньше.
Код:
 
var a:tstrings;... begin
ds(var g...):pointer;
..
a:=tstrings(ds(g..)^);
bill вне форума Ответить с цитированием
Старый 17.09.2007, 17:37   #4
tebeen
Пользователь
 
Регистрация: 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 из памяти?
tebeen вне форума Ответить с цитированием
Старый 18.09.2007, 16:38   #5
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

1.В делфи для работы со строками есть модуль ShareMem. Может в паскале есть что нить подобное, т.к. ошибки не вижу.
2. а -да
б- процедура dispose(p);p: pointer.
bill вне форума Ответить с цитированием
Старый 18.09.2007, 16:54   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Сообщение от tebeen Посмотреть сообщение
В этом случае выдаёт ошибку.
Ессно выдает, зачем free поставил?!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2007, 18:59   #7
tebeen
Пользователь
 
Регистрация: 08.09.2007
Сообщений: 15
По умолчанию

Delphi 6 - sp3. что-то я подзапарил с Pascal.

А если free не писать, как я память освобожу.

за p: pointer. спасибо, тоже.
tebeen вне форума Ответить с цитированием
Старый 18.09.2007, 20:09   #8
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 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;
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с 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