@@ -39,18 +39,14 @@ WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
3939#include "cdlg.h"
4040
4141
42- DECLSPEC_HIDDEN HINSTANCE COMDLG32_hInstance = 0 ;
42+ HINSTANCE COMDLG32_hInstance = 0 ;
4343#ifdef __REACTOS__
44- CRITICAL_SECTION COMDLG32_OpenFileLock DECLSPEC_HIDDEN ;
44+ CRITICAL_SECTION COMDLG32_OpenFileLock ;
4545#endif
46+ HANDLE COMDLG32_hActCtx = INVALID_HANDLE_VALUE ;
4647
4748static DWORD COMDLG32_TlsIndex = TLS_OUT_OF_INDEXES ;
4849
49- static HINSTANCE SHELL32_hInstance ;
50-
51- /* SHELL */
52- LPITEMIDLIST (WINAPI * COMDLG32_SHSimpleIDListFromPathAW )(LPCVOID ) DECLSPEC_HIDDEN ;
53-
5450/***********************************************************************
5551 * DllMain (COMDLG32.init)
5652 *
@@ -60,39 +56,39 @@ LPITEMIDLIST (WINAPI *COMDLG32_SHSimpleIDListFromPathAW)(LPCVOID) DECLSPEC_HIDDE
6056 * FALSE if sibling could not be loaded or instantiated twice, TRUE
6157 * otherwise.
6258 */
63- static const char GPA_string [] = "Failed to get entry point %s for hinst = %p\n" ;
64- #define GPA (dest , hinst , name ) \
65- if(!(dest = (void*)GetProcAddress(hinst,name)))\
66- { \
67- ERR(GPA_string, debugstr_a(name), hinst); \
68- return FALSE; \
69- }
70-
7159BOOL WINAPI DllMain (HINSTANCE hInstance , DWORD Reason , LPVOID Reserved )
7260{
73- TRACE ("(%p, %d , %p)\n" , hInstance , Reason , Reserved );
61+ TRACE ("(%p, %ld , %p)\n" , hInstance , Reason , Reserved );
7462
7563 switch (Reason )
7664 {
7765 case DLL_PROCESS_ATTACH :
66+ {
67+ ACTCTXW actctx = {0 };
68+
7869 COMDLG32_hInstance = hInstance ;
7970 DisableThreadLibraryCalls (hInstance );
8071
81- SHELL32_hInstance = GetModuleHandleA ("SHELL32.DLL" );
8272#ifdef __REACTOS__
8373 InitializeCriticalSection (& COMDLG32_OpenFileLock );
8474#endif
75+ actctx .cbSize = sizeof (actctx );
76+ actctx .hModule = COMDLG32_hInstance ;
77+ actctx .lpResourceName = MAKEINTRESOURCEW (123 );
78+ actctx .dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID ;
79+ COMDLG32_hActCtx = CreateActCtxW (& actctx );
80+ if (COMDLG32_hActCtx == INVALID_HANDLE_VALUE )
81+ ERR ("failed to create activation context, last error %lu\n" , GetLastError ());
8582
86- /* SHELL */
87- GPA (COMDLG32_SHSimpleIDListFromPathAW , SHELL32_hInstance , (LPCSTR )162 );
8883 break ;
89-
84+ }
9085 case DLL_PROCESS_DETACH :
9186 if (Reserved ) break ;
9287 if (COMDLG32_TlsIndex != TLS_OUT_OF_INDEXES ) TlsFree (COMDLG32_TlsIndex );
9388#ifdef __REACTOS__
9489 DeleteCriticalSection (& COMDLG32_OpenFileLock );
9590#endif
91+ if (COMDLG32_hActCtx != INVALID_HANDLE_VALUE ) ReleaseActCtx (COMDLG32_hActCtx );
9692 break ;
9793 }
9894 return TRUE;
@@ -127,7 +123,7 @@ void *COMDLG32_AllocMem(int size)
127123 */
128124void COMDLG32_SetCommDlgExtendedError (DWORD err )
129125{
130- TRACE ("(%08x )\n" , err );
126+ TRACE ("(%08lx )\n" , err );
131127 if (COMDLG32_TlsIndex == TLS_OUT_OF_INDEXES )
132128 COMDLG32_TlsIndex = TlsAlloc ();
133129 if (COMDLG32_TlsIndex != TLS_OUT_OF_INDEXES )
@@ -153,8 +149,6 @@ DWORD WINAPI CommDlgExtendedError(void)
153149 return 0 ; /* we never set an error, so there isn't one */
154150}
155151
156- #ifndef __REACTOS__ /* Win 7 */
157-
158152/*************************************************************************
159153 * Implement the CommDlg32 class factory
160154 *
@@ -245,6 +239,7 @@ static const IClassFactoryVtbl CDLGCF_Vtbl =
245239 */
246240HRESULT WINAPI DllGetClassObject (REFCLSID rclsid , REFIID riid , void * * ppv )
247241{
242+ #ifndef __REACTOS__ /* TODO: SHCreateItemFromIDList */
248243 static IClassFactoryImpl FileOpenDlgClassFactory = {{& CDLGCF_Vtbl }, FileOpenDialog_Constructor };
249244 static IClassFactoryImpl FileSaveDlgClassFactory = {{& CDLGCF_Vtbl }, FileSaveDialog_Constructor };
250245
@@ -255,32 +250,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
255250
256251 if (IsEqualGUID (& CLSID_FileSaveDialog , rclsid ))
257252 return IClassFactory_QueryInterface (& FileSaveDlgClassFactory .IClassFactory_iface , riid , ppv );
258-
259- return CLASS_E_CLASSNOTAVAILABLE ;
260- }
261-
262- /***********************************************************************
263- * DllRegisterServer (COMMDLG32.@)
264- */
265- HRESULT WINAPI DllRegisterServer (void )
266- {
267- #ifdef __REACTOS__
268- return E_FAIL ; // FIXME: __wine_register_resources(COMDLG32_hInstance);
269- #else
270- return __wine_register_resources (COMDLG32_hInstance );
271253#endif
272- }
273254
274- /***********************************************************************
275- * DllUnregisterServer (COMMDLG32.@)
276- */
277- HRESULT WINAPI DllUnregisterServer (void )
278- {
279- #ifdef __REACTOS__
280- return E_FAIL ; // FIXME: __wine_unregister_resources(COMDLG32_hInstance);
281- #else
282- return __wine_unregister_resources (COMDLG32_hInstance );
283- #endif
255+ return CLASS_E_CLASSNOTAVAILABLE ;
284256}
285-
286- #endif /* Win 7 */
0 commit comments