diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c index aad6a79f46c02f4ec8b472502d91b7c91cf88345..9b46f19ca7cddae6130496633639b0e4140e79ad 100644 --- a/dlls/shell32/iconcache.c +++ b/dlls/shell32/iconcache.c @@ -706,7 +706,7 @@ INT32 WINAPI Shell_GetCachedImageIndex32AW(LPCVOID szPath, INT32 nIndex, DWORD z /************************************************************************* * ExtracticonEx32 [shell32.189] */ -HICON32 WINAPI ExtractIconEx32AW ( LPVOID lpszFile, INT32 nIconIndex, HICON32 * phiconLarge, HICON32 * phiconSmall, UINT32 nIcons ) +HICON32 WINAPI ExtractIconEx32AW ( LPCVOID lpszFile, INT32 nIconIndex, HICON32 * phiconLarge, HICON32 * phiconSmall, UINT32 nIcons ) { if (VERSION_OsIsUnicode()) return ExtractIconEx32W ( lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); return ExtractIconEx32A ( lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); @@ -718,7 +718,7 @@ HICON32 WINAPI ExtractIconEx32AW ( LPVOID lpszFile, INT32 nIconIndex, HICON32 * * 1 file is not valid * HICON32 handle of a icon (phiconLarge/Small == NULL) */ -HICON32 WINAPI ExtractIconEx32A ( LPSTR lpszFile, INT32 nIconIndex, HICON32 * phiconLarge, HICON32 * phiconSmall, UINT32 nIcons ) +HICON32 WINAPI ExtractIconEx32A ( LPCSTR lpszFile, INT32 nIconIndex, HICON32 * phiconLarge, HICON32 * phiconSmall, UINT32 nIcons ) { HICON32 ret=0; TRACE(shell,"file=%s idx=%i %p %p num=%i\n", lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons ); @@ -750,7 +750,7 @@ HICON32 WINAPI ExtractIconEx32A ( LPSTR lpszFile, INT32 nIconIndex, HICON32 * ph /************************************************************************* * ExtracticonEx32W [shell32.191] */ -HICON32 WINAPI ExtractIconEx32W ( LPWSTR lpszFile, INT32 nIconIndex, HICON32 * phiconLarge, HICON32 * phiconSmall, UINT32 nIcons ) +HICON32 WINAPI ExtractIconEx32W ( LPCWSTR lpszFile, INT32 nIconIndex, HICON32 * phiconLarge, HICON32 * phiconSmall, UINT32 nIcons ) { LPSTR sFile; DWORD ret; diff --git a/if1632/shell.spec b/if1632/shell.spec index 3a5ffb647cbad8cd533153f7781a03ae6bbdc2bc..50e8eeff9dd3975a92599f1f12b9ef03dc87218b 100644 --- a/if1632/shell.spec +++ b/if1632/shell.spec @@ -21,7 +21,7 @@ type win16 37 pascal DoEnvironmentSubst(ptr word) DoEnvironmentSubst 38 pascal FindEnvironmentString(ptr) FindEnvironmentString 39 pascal16 InternalExtractIcon(word ptr s_word word) InternalExtractIcon - 40 stub ExtractIconEx + 40 pascal16 ExtractIconEx(str word ptr ptr word) ExtractIconEx16 # 98 stub SHL3216_THUNKDATA16 # 99 stub SHL1632_THUNKDATA16 diff --git a/include/shell.h b/include/shell.h index 2b5cdf69137d477a51af905b2ae756ce47e21964..884ac5b19cd31666e636546615eea07721535775 100644 --- a/include/shell.h +++ b/include/shell.h @@ -311,10 +311,11 @@ LPWSTR WINAPI StrFormatByteSize32W ( DWORD dw, LPWSTR pszBuf, UINT32 cchBuf ); /**************************************************************************** * other functions */ -HICON32 WINAPI ExtractIconEx32A ( LPSTR, INT32, HICON32 *, HICON32 *, UINT32 ); -HICON32 WINAPI ExtractIconEx32W ( LPWSTR, INT32, HICON32 *, HICON32 *, UINT32 ); +HICON16 WINAPI ExtractIconEx16 ( LPCSTR, INT16, HICON16 *, HICON16 *, UINT16 ); +HICON32 WINAPI ExtractIconEx32A( LPCSTR, INT32, HICON32 *, HICON32 *, UINT32 ); +HICON32 WINAPI ExtractIconEx32W( LPCWSTR, INT32, HICON32 *, HICON32 *, UINT32 ); #define ExtractIconEx WINELIB_NAME_AW(ExtractIconEx) -HICON32 WINAPI ExtractIconEx32AW ( LPVOID, INT32, HICON32 *, HICON32 *, UINT32 ); +HICON32 WINAPI ExtractIconEx32AW(LPCVOID, INT32, HICON32 *, HICON32 *, UINT32 ); LPVOID WINAPI SHAlloc(DWORD len); DWORD WINAPI SHFree(LPVOID x); diff --git a/misc/shell.c b/misc/shell.c index 4947eeb3d44a88991bf2350d9c1bb9201d8e3e4b..d30603214d80dedbffda4d3b1ce1860bf6c9f95c 100644 --- a/misc/shell.c +++ b/misc/shell.c @@ -875,7 +875,38 @@ HICON16 WINAPI ExtractIcon16( HINSTANCE16 hInstance, LPCSTR lpszExeFileName, return ExtractIcon32A( hInstance, lpszExeFileName, nIconIndex ); } - +/************************************************************************* + * ExtractIconEx16 (SHELL.40) + */ +HICON16 WINAPI ExtractIconEx16( + LPCSTR lpszFile, INT16 nIconIndex, HICON16 *phiconLarge, + HICON16 *phiconSmall, UINT16 nIcons +) { + HICON32 *ilarge,*ismall; + UINT16 ret; + int i; + + if (phiconLarge) + ilarge = (HICON32*)HeapAlloc(GetProcessHeap(),0,nIcons*sizeof(HICON32)); + else + ilarge = NULL; + if (phiconSmall) + ismall = (HICON32*)HeapAlloc(GetProcessHeap(),0,nIcons*sizeof(HICON32)); + else + ismall = NULL; + ret = ExtractIconEx32A(lpszFile,nIconIndex,ilarge,ismall,nIcons); + if (ilarge) { + for (i=0;i<nIcons;i++) + phiconLarge[i]=ilarge[i]; + HeapFree(GetProcessHeap(),0,ilarge); + } + if (ismall) { + for (i=0;i<nIcons;i++) + phiconSmall[i]=ismall[i]; + HeapFree(GetProcessHeap(),0,ismall); + } + return ret; +} /************************************************************************* * ExtractAssociatedIcon [SHELL.36]