Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача структуры с типом String [D7, XP]


Цукор5 ©   (2011-11-29 17:42:00) 

Имеется структура.  Одно из полей этой структуры имеет тип String.

TMyRecive = packed record
   ClientSocket: DWord;
   hText: String;
 end;
 PMyRecive = ^TMyRecive;


Подскажите, правильно ли я передаю структуру? Может имеет смысл дополнительно вызывать StrDisposeдля строк в структуре?

...
New(Q);
Q^.ClientSocket:=ClientSocket;
Q^.hText:=Text;
PostMessage(Handle, WM_USER+60, wParam(Q),0);
...
...

procedure TForm1.MyTCPReciveBytes(var Msg: TMessage);
 var Q:PMyRecive;
begin
 Q:=PMyRecive(Msg.wParam);
 ...
  Dispose(Q);
end;


_Юрий   (2011-11-30 18:35:00) [1]


> Не, как раз разные сборки


Почему?


Германн   (2011-11-30 01:36:00) [2]


> Германн ©   (30.11.11 01:19) [14]
>
>
> > if IsDebuggerPresent then
> >
>
> Это из другой оперы.
>

Это к
> _Юрий   (29.11.11 22:48) [12]
>
>


Германн   (2011-11-30 01:19:00) [3]


> if IsDebuggerPresent then
>

Это из другой оперы.


Ega23   (2011-11-29 22:51:00) [4]


> if IsDebuggerPresent then


Не, как раз разные сборки


_Юрий   (2011-11-29 22:48:00) [5]


> Ega23 ©   (29.11.11 22:08) [10]
> {$IFDEF DEBUG}
>  ReportMemoryLeaksOnShutdown := True;
> {$ENDIF}


if IsDebuggerPresent then


Jeer   (2011-11-29 22:43:00) [6]

На любителя.
Глобальную DebugHook не зря изобрели.

У меня всегда в проекте ( есть такой противный Init.pas ) живет isDebug для моих целей.


Ega23   (2011-11-29 22:08:00) [7]


> В третьих (c D2006):
>
> Воткнуть лучше в dpr вот тут:
>
> begin
> // add with hands
>   ReportMemoryLeaksOnShutdown := DebugHook <> 0;


Тогда уж
{$IFDEF DEBUG}
 ReportMemoryLeaksOnShutdown := True;
{$ENDIF}


Jeer   (2011-11-29 21:21:00) [8]

Во-первых:
- ReportMemoryLeak OnShutDown

Во-вторых:
- FastMM не включен в D7 по умолчанию.

В третьих (c D2006):

Воткнуть лучше в dpr вот тут:

begin
// add with hands
  ReportMemoryLeaksOnShutdown := DebugHook <> 0;
//
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TMainForm, MainForm) ;
  Application.Run;
end.


_Юрий   (2011-11-29 20:48:00) [9]

ReportMemoryLeakAtShutDown := True;

и вы получите сообщение на закрытии приложения в случае, если есть проблемы с утечками памяти


нонамэ   (2011-11-29 19:48:00) [10]

Все нормально. Dispose вызовет _FinalizeRecord, который в свою очередь, позаботится о строках, дин. массивах, вариантах и интерфесах.


Цукор5   (2011-11-29 18:00:00) [11]


> Необходимо описать Q


Q:PMyRecive;


Anatoly Podgoretsky   (2011-11-29 17:53:00) [12]

> Цукор5  (29.11.2011 17:42:00)  [0]

Необходимо описать Q


Ega23   (2011-11-29 17:51:00) [13]


> Может имеет смысл дополнительно вызывать StrDispose для
> строк в структуре?


Не надо.
Код, вроде, нормальный.


Медвежонок Пятачок   (2011-11-29 17:50:00) [14]

Может имеет смысл дополнительно вызывать StrDispose для строк в структуре?

Тогда имеет смысл сначала использовать StrAlloc


Медвежонок Пятачок   (2011-11-29 17:45:00) [15]

хотя если New и контролировать время жизни, то все ок.


Медвежонок Пятачок   (2011-11-29 17:44:00) [16]

конечно неправильно.
так как постмесадж, то на момент обработки структура уже может умереть вместе с указателем на строку


Наверх

Титульная страница Поиск, карта сайта Написать письмо