Re[11]: Скорость работы сборщика мусора
От: LordZond  
Дата: 04.06.09 05:13
Оценка: 3 (1)
Рекомендую Вам посмотреть в сторону DSOFramer это .Net host control для офисных приложений
Re: Скорость работы сборщика мусора
От: meowth  
Дата: 03.06.09 14:25
Оценка: 1 (1)
Здравствуйте, G0ga, Вы писали:

G>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .


Благородные Доны, кто-нибудь понял автора?
Re[9]: Скорость работы сборщика мусора
От: _gargon Украина  
Дата: 03.06.09 16:34
Оценка: 1 (1)
Здравствуйте, G0ga, Вы писали:

G>Здравствуйте, _gargon, Вы писали:


_>>Честно говоря мало, что понял, но что я понял:

_>>В твоем приложении отображается окно (не главное), под которое ты создаеш вордовский документ и отображаеш его где-то в своем окне.
_>>После закрытия твоего окна (не главного), в виде вызова метода Dispose, ты ни как не можеш заюзать вордовский ком-объект,
_>>т.к. он какогото х кем то освободился?
_>>Я правильно понимаю ?

G>В целом правильно, только вордовский документ отображается на части окна, а точнее на UserControl-е.

Можно попробовать такое решение:
Создается UserControl, который обварачивает вордовское окно. Перегружается Load событие созданного UserControl'a, в котором вытягивается родительская форма (свойство TopLevelControl). К родительской форме добавляется обработчик FormClosed в котором происходит отсоединение вордовского документа.
Решение далеко не супер, плюс имеет ограничение — родительская форма дожна быть закрыта при помощи пользователя или вызова метода Close() для обычного окна (для диалога должно работать нормально).
А лучше ваще отказаться от такого, извини, "извращеного" использования ворда.
Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 13:21
Оценка:
В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .

03.06.09 21:12: Перенесено из '.NET'
Re[2]: Скорость работы сборщика мусора
От: EvilChild Ниоткуда  
Дата: 03.06.09 14:29
Оценка:
Здравствуйте, meowth, Вы писали:

M>Здравствуйте, G0ga, Вы писали:


G>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .


M>Благородные Доны, кто-нибудь понял автора?


Да, он зовёт Dispose в обратном порядке — от этого и проблемы.
Re[2]: Скорость работы сборщика мусора
От: Какая разница Украина  
Дата: 03.06.09 14:31
Оценка:
Здравствуйте, meowth, Вы писали:

M>Здравствуйте, G0ga, Вы писали:


G>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .


M>Благородные Доны, кто-нибудь понял автора?


Автор просит заимплементить пропертю "низззззя" в GС object.
Было бы неплохо добавить еще 2 проперти "хочу" и "тупо хочу"
!0xDEAD
Re[3]: Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 14:32
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, meowth, Вы писали:


M>>Здравствуйте, G0ga, Вы писали:


G>>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .


M>>Благородные Доны, кто-нибудь понял автора?


EC>Да, он зовёт Dispose в обратном порядке — от этого и проблемы.

А тогда встречный вопрос: как определить разрушен COM объект или жив. Просто писать в программе "провоцирующий" код как-то неправильно.
Re[3]: Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 14:43
Оценка:
Здравствуйте, Какая разница, Вы писали:

КР>Здравствуйте, meowth, Вы писали:


M>>Здравствуйте, G0ga, Вы писали:


G>>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .


M>>Благородные Доны, кто-нибудь понял автора?


КР>Автор просит заимплементить пропертю "низззззя" в GС object.

КР>Было бы неплохо добавить еще 2 проперти "хочу" и "тупо хочу"

А кто говорит про "заимплементить пропертю"? Это ваше ... воображение (понимание)
Re: Скорость работы сборщика мусора
От: _gargon Украина  
Дата: 03.06.09 14:49
Оценка:
Здравствуйте, G0ga, Вы писали:

G>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .

Мне кажется, что окно др. прил. нужно открепить до реального закрытия окна (т.е. до вызова Dispose управляемого окна)
Re[2]: Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 14:53
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Здравствуйте, G0ga, Вы писали:


G>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .

_>Мне кажется, что окно др. прил. нужно открепить до реального закрытия окна (т.е. до вызова Dispose управляемого окна)

Это конечно правильно, но это контрол который используется в нескольких местах. И такой код надо писать в каждой форме, где используется контрол.
Re[2]: Скорость работы сборщика мусора
От: _gargon Украина  
Дата: 03.06.09 14:57
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Здравствуйте, G0ga, Вы писали:


G>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал (а мне очень нужно его оставить). Как правильно поступить в данной ситуации? Если это "сборщик мусора", то можно ему "сказать" — "низззззя". Контрол подписан на событие OnQuit приложения. Увы пусто .

_>Мне кажется, что окно др. прил. нужно открепить до реального закрытия окна (т.е. до вызова Dispose управляемого окна)
Например:

public class ManagedForm : Form {
...
  private void DetachChildControls() { ... }

  protected override void OnFormClosing(FormClosingEventArgs e) {
    base.OnFormClosing(e);
    if (!e.Cancel) {
      DetachChildControls();
    }
  }
...
}
Re[3]: Скорость работы сборщика мусора
От: _gargon Украина  
Дата: 03.06.09 15:04
Оценка:
Здравствуйте, G0ga, Вы писали:

G>Здравствуйте, _gargon, Вы писали:


_>>Здравствуйте, G0ga, Вы писали:


G>>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал.

В каком смысле утилизировал? Вызвал CloseWindow(HWDN) для присоединенного внешнего окна или ссылка на обертку окна равна null?

G>Это конечно правильно, но это контрол который используется в нескольких местах. И такой код надо писать в каждой форме, где используется контрол.
Re[4]: Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 15:07
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Здравствуйте, G0ga, Вы писали:


G>>Здравствуйте, _gargon, Вы писали:


_>>>Здравствуйте, G0ga, Вы писали:


G>>>>В общем это мои догадки. Есть форма на ней контрол. К контролу через WinAPI прикрепляется окно другого приложения. Все работает замечательно. Но вот необходимо закрыть окно. Последовательно вызываются методы Dispose формы затем контрола. В реализации этого метода (для контрола) указываем открепить окно другого приложения, но увы кто-то его уже утилизировал.

_>В каком смысле утилизировал? Вызвал CloseWindow(HWDN) для присоединенного внешнего окна или ссылка на обертку окна равна null?

G>>Это конечно правильно, но это контрол который используется в нескольких местах. И такой код надо писать в каждой форме, где используется контрол.


Нет конечно и ссылка неравна NULL. Просто обращение к любому свойству окна вызывает System.Runtime.InteropServices.COMException.
Re[5]: Скорость работы сборщика мусора
От: _gargon Украина  
Дата: 03.06.09 15:12
Оценка:
Здравствуйте, G0ga, Вы писали:

G>Нет конечно и ссылка неравна NULL. Просто обращение к любому свойству окна вызывает System.Runtime.InteropServices.COMException.

Можеш привести код присоединения нативного окна?
Re[6]: Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 15:22
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Здравствуйте, G0ga, Вы писали:


G>>Нет конечно и ссылка неравна NULL. Просто обращение к любому свойству окна вызывает System.Runtime.InteropServices.COMException.

_>Можеш привести код присоединения нативного окна?

public class ExternalApplication
{
#region "API usage declarations"

[DllImport("user32.dll")]
public static extern int FindWindow(string strclassName, string strWindowName);
[DllImport("user32.dll")]
public static extern int SetParent(int hWndChild, int hWndNewParent);
[DllImport("user32.dll")]
public static extern int GetParent(int hWndChild);
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern bool SetWindowPos(
  int hWnd,               // handle to window
  int hWndInsertAfter,    // placement-order handle
  int X,                  // horizontal position
  int Y,                  // vertical position
  int cx,                 // width
  int cy,                 // height
  uint uFlags             // window-positioning options
);
[DllImport("user32.dll", EntryPoint = "MoveWindow")]
public static extern bool MoveWindow(
  int hWnd, 
  int X,
  int Y,
  int nWidth,
  int nHeight,
  bool bRepaint
);
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public static extern Int32 ShowWindow(
  Int32 hWnd,
  Int32 nCmdShow
);
public const int MF_BYPOSITION = 0x400;
public const int MF_REMOVE = 0x1000;
public const Int32 SW_HIDE = 0;
public const Int32 SW_RESTORE = 9;
public const Int32 SWP_DRAWFRAME = 0x20;
public const Int32 SWP_NOMOVE = 0x2;
public const Int32 SWP_NOSIZE = 0x1;
public const Int32 SWP_NOZORDER = 0x4;
#endregion

public static int wordWnd = 0;

internal static Word.ApplicationClass _WordApplication = null;
public static Word.ApplicationClass WordApplication
{
  get
  {
    if (ExternalApplication._WordApplication == null)
    {
      ExternalApplication._WordApplication = new Word.ApplicationClass();
      if (wordWnd == 0) wordWnd = FindWindow("Opusapp", null);
      ExternalApplication.SetParent(ExternalApplication.wordWnd, Thread.CurrentThread.ManagedThreadId);
      _WordApplication.ApplicationEvents4_Event_Quit += new Microsoft.Office.Interop.Word.ApplicationEvents4_QuitEventHandler(ExternalApplication.OnQuit);
    }
    return ExternalApplication._WordApplication;
  }
}


  this.WordApplication.Visible = true;
  this.WordApplication.DocumentBeforeClose += new Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(OnClose);
  this.WordApplication.ApplicationEvents2_Event_Quit += new Microsoft.Office.Interop.Word.ApplicationEvents2_QuitEventHandler(OnQuit);
  ExternalApplication.SetParent(ExternalApplication.wordWnd, this.Handle.ToInt32());
  ExternalApplication.SetWindowPos(ExternalApplication.wordWnd, this.Handle.ToInt32(), 0, 0, this.Bounds.Width, this.Bounds.Height, ExternalApplication.SWP_NOZORDER | ExternalApplication.SWP_NOMOVE | ExternalApplication.SWP_DRAWFRAME | ExternalApplication.SWP_NOSIZE);
Re[7]: Скорость работы сборщика мусора
От: _gargon Украина  
Дата: 03.06.09 15:48
Оценка:
Здравствуйте, G0ga, Вы писали:

G>Здравствуйте, _gargon, Вы писали:


_>>Здравствуйте, G0ga, Вы писали:


G>>>Нет конечно и ссылка неравна NULL. Просто обращение к любому свойству окна вызывает System.Runtime.InteropServices.COMException.

_>>Можеш привести код присоединения нативного окна?

G>
G>public class ExternalApplication
G>{
G>#region "API usage declarations"

G>[DllImport("user32.dll")]
G>public static extern int FindWindow(string strclassName, string strWindowName);
G>[DllImport("user32.dll")]
G>public static extern int SetParent(int hWndChild, int hWndNewParent);
G>[DllImport("user32.dll")]
G>public static extern int GetParent(int hWndChild);
G>[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
G>public static extern bool SetWindowPos(
G>  int hWnd,               // handle to window
G>  int hWndInsertAfter,    // placement-order handle
G>  int X,                  // horizontal position
G>  int Y,                  // vertical position
G>  int cx,                 // width
G>  int cy,                 // height
G>  uint uFlags             // window-positioning options
G>);
G>[DllImport("user32.dll", EntryPoint = "MoveWindow")]
G>public static extern bool MoveWindow(
G>  int hWnd, 
G>  int X,
G>  int Y,
G>  int nWidth,
G>  int nHeight,
G>  bool bRepaint
G>);
G>[DllImport("user32.dll", EntryPoint = "ShowWindow")]
G>public static extern Int32 ShowWindow(
G>  Int32 hWnd,
G>  Int32 nCmdShow
G>);
G>public const int MF_BYPOSITION = 0x400;
G>public const int MF_REMOVE = 0x1000;
G>public const Int32 SW_HIDE = 0;
G>public const Int32 SW_RESTORE = 9;
G>public const Int32 SWP_DRAWFRAME = 0x20;
G>public const Int32 SWP_NOMOVE = 0x2;
G>public const Int32 SWP_NOSIZE = 0x1;
G>public const Int32 SWP_NOZORDER = 0x4;
G>#endregion

G>public static int wordWnd = 0;

G>internal static Word.ApplicationClass _WordApplication = null;
G>public static Word.ApplicationClass WordApplication
G>{
G>  get
G>  {
G>    if (ExternalApplication._WordApplication == null)
G>    {
G>      ExternalApplication._WordApplication = new Word.ApplicationClass();
G>      if (wordWnd == 0) wordWnd = FindWindow("Opusapp", null);
G>      ExternalApplication.SetParent(ExternalApplication.wordWnd, Thread.CurrentThread.ManagedThreadId);
G>      _WordApplication.ApplicationEvents4_Event_Quit += new Microsoft.Office.Interop.Word.ApplicationEvents4_QuitEventHandler(ExternalApplication.OnQuit);
G>    }
G>    return ExternalApplication._WordApplication;
G>  }
G>}
G>


G>
G>  this.WordApplication.Visible = true;
G>  this.WordApplication.DocumentBeforeClose += new Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(OnClose);
G>  this.WordApplication.ApplicationEvents2_Event_Quit += new Microsoft.Office.Interop.Word.ApplicationEvents2_QuitEventHandler(OnQuit);
G>  ExternalApplication.SetParent(ExternalApplication.wordWnd, this.Handle.ToInt32());
G>  ExternalApplication.SetWindowPos(ExternalApplication.wordWnd, this.Handle.ToInt32(), 0, 0, this.Bounds.Width, this.Bounds.Height, ExternalApplication.SWP_NOZORDER | ExternalApplication.SWP_NOMOVE | ExternalApplication.SWP_DRAWFRAME | ExternalApplication.SWP_NOSIZE);
G>


Честно говоря мало, что понял, но что я понял:
В твоем приложении отображается окно (не главное), под которое ты создаеш вордовский документ и отображаеш его где-то в своем окне.
После закрытия твоего окна (не главного), в виде вызова метода Dispose, ты ни как не можеш заюзать вордовский ком-объект,
т.к. он какогото х кем то освободился?
Я правильно понимаю ?
Re[8]: Скорость работы сборщика мусора
От: G0ga  
Дата: 03.06.09 15:55
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Честно говоря мало, что понял, но что я понял:

_>В твоем приложении отображается окно (не главное), под которое ты создаеш вордовский документ и отображаеш его где-то в своем окне.
_>После закрытия твоего окна (не главного), в виде вызова метода Dispose, ты ни как не можеш заюзать вордовский ком-объект,
_>т.к. он какогото х кем то освободился?
_>Я правильно понимаю ?

В целом правильно, только вордовский документ отображается на части окна, а точнее на UserControl-е.
Re[10]: Скорость работы сборщика мусора
От: G0ga  
Дата: 04.06.09 04:57
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Здравствуйте, G0ga, Вы писали:


G>>Здравствуйте, _gargon, Вы писали:


_>>>Честно говоря мало, что понял, но что я понял:

_>>>В твоем приложении отображается окно (не главное), под которое ты создаеш вордовский документ и отображаеш его где-то в своем окне.
_>>>После закрытия твоего окна (не главного), в виде вызова метода Dispose, ты ни как не можеш заюзать вордовский ком-объект,
_>>>т.к. он какогото х кем то освободился?
_>>>Я правильно понимаю ?

G>>В целом правильно, только вордовский документ отображается на части окна, а точнее на UserControl-е.

_>Можно попробовать такое решение:
_>Создается UserControl, который обварачивает вордовское окно. Перегружается Load событие созданного UserControl'a, в котором вытягивается родительская форма (свойство TopLevelControl). К родительской форме добавляется обработчик FormClosed в котором происходит отсоединение вордовского документа.
_>Решение далеко не супер, плюс имеет ограничение — родительская форма дожна быть закрыта при помощи пользователя или вызова метода Close() для обычного окна (для диалога должно работать нормально).
_>А лучше ваще отказаться от такого, извини, "извращеного" использования ворда.

Спасибо, что потратили на меня время
Re[12]: Скорость работы сборщика мусора
От: G0ga  
Дата: 04.06.09 06:58
Оценка:
Здравствуйте, LordZond, Вы писали:

LZ>Рекомендую Вам посмотреть в сторону DSOFramer это .Net host control для офисных приложений


LordZond, как говорится лучше поздно чем никогда
Спасибо.
Re[10]: Скорость работы сборщика мусора
От: Pavel Dvorkin Россия  
Дата: 04.06.09 09:15
Оценка:
Здравствуйте, _gargon, Вы писали:

_>Здравствуйте, G0ga, Вы писали:

_>Можно попробовать такое решение:
_>Создается UserControl, который обварачивает вордовское окно. Перегружается Load событие созданного UserControl'a, в котором вытягивается родительская форма (свойство TopLevelControl). К родительской форме добавляется обработчик FormClosed в котором происходит отсоединение вордовского документа.
_>Решение далеко не супер, плюс имеет ограничение — родительская форма дожна быть закрыта при помощи пользователя или вызова метода Close() для обычного окна (для диалога должно работать нормально).

ИМХО можно проще. Автор исходного постинга знаком с Win32, поэтому должен меня понять.

Устраиваем сабклассинг вордовского окна (SetWindowLongPtr) примерно здесь

ExternalApplication.SetParent(ExternalApplication.wordWnd, Thread.CurrentThread.ManagedThreadId);

Теперь все сообщения идут через сабклассирующую функцию. На FormClosed формы посылаем этому вордовскому окну (SendMessage) некое юзеровское сообщение, в ответ на которое он себе прописывает парентом некое иное окно.

Единственно, что я не знаю — как эту сабклассирующую функцию написать на C#. На чистом С она пишется за 5 минут.
With best regards
Pavel Dvorkin
Re[4]: Скорость работы сборщика мусора
От: игппук Беларусь  
Дата: 04.06.09 11:06
Оценка:
Здравствуйте, G0ga, Вы писали:

G>А тогда встречный вопрос: как определить разрушен COM объект или жив. Просто писать в программе "провоцирующий" код как-то неправильно.


у каждого ком объекта есть счетчик подписчиков. если он равен 0, значит объект уже разрушен.
проклятый антисутенерский закон
Re[5]: Скорость работы сборщика мусора
От: G0ga  
Дата: 04.06.09 11:16
Оценка:
Здравствуйте, игппук, Вы писали:

И>Здравствуйте, G0ga, Вы писали:


G>>А тогда встречный вопрос: как определить разрушен COM объект или жив. Просто писать в программе "провоцирующий" код как-то неправильно.


И>у каждого ком объекта есть счетчик подписчиков. если он равен 0, значит объект уже разрушен.


А если этот объект определён как статический. Он следовательно один единственный. И закрытие формы это делает так, что глазом моргнуть не успеешь.
Re[6]: Скорость работы сборщика мусора
От: игппук Беларусь  
Дата: 04.06.09 19:42
Оценка:
И>>у каждого ком объекта есть счетчик подписчиков. если он равен 0, значит объект уже разрушен.

G>А если этот объект определён как статический. Он следовательно один единственный. И закрытие формы это делает так, что глазом моргнуть не успеешь.


ни разу не встречал статического ком-объекта в одном единственном экземпляре. есть примеры?
проклятый антисутенерский закон
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.