Mike McCormack : msi: Unload riched20 after its window is destroyed.
Module: wine Branch: refs/heads/master Commit: ead00327e9dde616695131005d59d230a2b1da71 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ead00327e9dde61669513100... Author: Mike McCormack <mike(a)codeweavers.com> Date: Fri Jan 6 12:35:09 2006 +0100 msi: Unload riched20 after its window is destroyed. --- dlls/msi/dialog.c | 13 +++++++++---- 1 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dlls/msi/dialog.c b/dlls/msi/dialog.c index bb64fdc..d0bf75b 100644 --- a/dlls/msi/dialog.c +++ b/dlls/msi/dialog.c @@ -59,6 +59,7 @@ struct msi_control_tag HBITMAP hBitmap; HICON hIcon; LPWSTR tabnext; + HMODULE hDll; WCHAR name[1]; }; @@ -328,6 +329,7 @@ static msi_control *msi_dialog_create_wi control->value = NULL; control->hBitmap = NULL; control->hIcon = NULL; + control->hDll = NULL; control->tabnext = strdupW( MSI_RecordGetString( rec, 11) ); x = MSI_RecordGetInteger( rec, 4 ); @@ -700,7 +702,6 @@ struct msi_scrolltext_info msi_dialog *dialog; msi_control *control; WNDPROC oldproc; - HMODULE hRichedit; }; static LRESULT WINAPI @@ -718,7 +719,6 @@ MSIScrollText_WndProc(HWND hWnd, UINT ms switch( msg ) { case WM_NCDESTROY: - FreeLibrary( info->hRichedit ); msi_free( info ); RemovePropW( hWnd, szButtonData ); break; @@ -778,24 +778,27 @@ static UINT msi_dialog_scrolltext_contro }; struct msi_scrolltext_info *info; msi_control *control; + HMODULE hRichedit; DWORD style; info = msi_alloc( sizeof *info ); if (!info) return ERROR_FUNCTION_FAILED; - info->hRichedit = LoadLibraryA("riched20"); + hRichedit = LoadLibraryA("riched20"); style = WS_BORDER | ES_MULTILINE | WS_VSCROLL | ES_READONLY | ES_AUTOVSCROLL | WS_TABSTOP; control = msi_dialog_add_control( dialog, rec, szRichEdit20W, style ); if (!control) { - FreeLibrary( info->hRichedit ); + FreeLibrary( hRichedit ); msi_free( info ); return ERROR_FUNCTION_FAILED; } + control->hDll = hRichedit; + info->dialog = dialog; info->control = control; @@ -2212,6 +2215,8 @@ void msi_dialog_destroy( msi_dialog *dia DestroyIcon( t->hIcon ); msi_free( t->tabnext ); msi_free( t ); + if (t->hDll) + FreeLibrary( t->hDll ); } /* destroy the list of fonts */
participants (1)
-
Alexandre Julliard