Borys
14.07.2004, 15:55
Итак, есть длл, в которой находится форма. Она экспортирует ф-ю, которая и показывает эту форму.
HWND __stdcall ShowForm(LPCSTR phone, HWND hndl, LPCSTR name)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
OfficeForm* pdlg;
pdlg = new OfficeForm();
if (pdlg!=NULL)
{
BOOL ret = pdlg->Create(IDD_OFFICEFORM_DIALOG, pdlg->FromHandlePermanent(hndl));
if(!ret) //Create failed.
{
AfxMessageBox("Error creating Dialog");
return NULL;
}
pdlg->SetWindowPos(pdlg->FromHandlePermanent(hndl), 100, 100, 10, 10, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
pdlg->parenthwnd=hndl;
pdlg->ShowWindow(SW_SHOW);
return (pdlg->GetSafeHwnd());
}
else
return NULL;
}
В диалоге, который показывает эта функция, при нажатии на кнопку "Закрыть" происходит следующее:
EndDialog(0);
::SendMessage(parenthwnd,WM_USER+97, 0,0);
Сообщение посылается на главное окно, которое и открывает форму из длл, для того, чтоб оно вызвало FreeLibrary, так как форма и длл больше не нужна.
Вопрос: должно ведь где-то быть delete pdlg;
Обязательно ли для этого писать новую функцию, которую будет эткпортировать длл, или это можно сделать в имеющейся (очень не хочется изменять интерфейс).
И вообще, что вы посоветуете предпринять, чтоб очистить выделенную память.
HWND __stdcall ShowForm(LPCSTR phone, HWND hndl, LPCSTR name)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
OfficeForm* pdlg;
pdlg = new OfficeForm();
if (pdlg!=NULL)
{
BOOL ret = pdlg->Create(IDD_OFFICEFORM_DIALOG, pdlg->FromHandlePermanent(hndl));
if(!ret) //Create failed.
{
AfxMessageBox("Error creating Dialog");
return NULL;
}
pdlg->SetWindowPos(pdlg->FromHandlePermanent(hndl), 100, 100, 10, 10, SWP_NOSIZE | SWP_NOZORDER | SWP_SHOWWINDOW);
pdlg->parenthwnd=hndl;
pdlg->ShowWindow(SW_SHOW);
return (pdlg->GetSafeHwnd());
}
else
return NULL;
}
В диалоге, который показывает эта функция, при нажатии на кнопку "Закрыть" происходит следующее:
EndDialog(0);
::SendMessage(parenthwnd,WM_USER+97, 0,0);
Сообщение посылается на главное окно, которое и открывает форму из длл, для того, чтоб оно вызвало FreeLibrary, так как форма и длл больше не нужна.
Вопрос: должно ведь где-то быть delete pdlg;
Обязательно ли для этого писать новую функцию, которую будет эткпортировать длл, или это можно сделать в имеющейся (очень не хочется изменять интерфейс).
И вообще, что вы посоветуете предпринять, чтоб очистить выделенную память.