diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c index 4c7362acb4511c5dd64f71fb27bd3cf50ba19f06..905a5b6e7feefd3368ca433c781ff996eb4ed6aa 100644 --- a/dlls/shell32/iconcache.c +++ b/dlls/shell32/iconcache.c @@ -498,25 +498,33 @@ HICON WINAPI ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lp } /************************************************************************* - * ExtractAssociatedIconExA (SHELL32.@) + * ExtractAssociatedIconExW (SHELL32.@) * * Return icon for given file (either from file itself or from associated * executable) and patch parameters if needed. */ -HICON WINAPI ExtractAssociatedIconExA(DWORD d1, DWORD d2, DWORD d3, DWORD d4) +HICON WINAPI ExtractAssociatedIconExW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIconIdx, LPWORD lpiIconId) { - FIXME("(%lx %lx %lx %lx): stub\n", d1, d2, d3, d4); + FIXME("%p %s %p %p): stub\n", hInst, debugstr_w(lpIconPath), lpiIconIdx, lpiIconId); return 0; } /************************************************************************* - * ExtractAssociatedIconExW (SHELL32.@) + * ExtractAssociatedIconExA (SHELL32.@) * * Return icon for given file (either from file itself or from associated * executable) and patch parameters if needed. */ -HICON WINAPI ExtractAssociatedIconExW(DWORD d1, DWORD d2, DWORD d3, DWORD d4) +HICON WINAPI ExtractAssociatedIconExA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIconIdx, LPWORD lpiIconId) { - FIXME("(%lx %lx %lx %lx): stub\n", d1, d2, d3, d4); - return 0; + HICON ret; + INT len = MultiByteToWideChar( CP_ACP, 0, lpIconPath, -1, NULL, 0 ); + LPWSTR lpwstrFile = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); + + TRACE("%p %s %p %p)\n", hInst, lpIconPath, lpiIconIdx, lpiIconId); + + MultiByteToWideChar( CP_ACP, 0, lpIconPath, -1, lpwstrFile, len ); + ret = ExtractAssociatedIconExW(hInst, lpwstrFile, lpiIconIdx, lpiIconId); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + return ret; } diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec index b78f347b7773cda666af26ee6738aa7ae957de32..77b73bf41fc3415b81d9fe58129d1dc9f3e30887 100644 --- a/dlls/shell32/shell32.spec +++ b/dlls/shell32/shell32.spec @@ -321,8 +321,8 @@ @ stub DragQueryFileAorW @ stdcall DuplicateIcon(long long) DuplicateIcon @ stdcall ExtractAssociatedIconA(long ptr long)ExtractAssociatedIconA -@ stdcall ExtractAssociatedIconExA(long long long long)ExtractAssociatedIconExA -@ stdcall ExtractAssociatedIconExW(long long long long)ExtractAssociatedIconExW +@ stdcall ExtractAssociatedIconExA(long str long long) ExtractAssociatedIconExA +@ stdcall ExtractAssociatedIconExW(long wstr long long) ExtractAssociatedIconExW @ stub ExtractAssociatedIconW @ stdcall ExtractIconA(long str long)ExtractIconA @ stdcall ExtractIconEx(ptr long ptr ptr long)ExtractIconExAW diff --git a/include/shellapi.h b/include/shellapi.h index 708c81f54d72202e729a8a27e2218551649b26ed..e22bbc11ad9040107dbbb99eb5a22fe429637817 100644 --- a/include/shellapi.h +++ b/include/shellapi.h @@ -270,6 +270,9 @@ HICON WINAPI ExtractIconW(HINSTANCE,LPCWSTR,UINT); HICON WINAPI ExtractAssociatedIconA(HINSTANCE,LPSTR,LPWORD); HICON WINAPI ExtractAssociatedIconW(HINSTANCE,LPWSTR,LPWORD); #define ExtractAssociatedIcon WINELIB_NAME_AW(ExtractAssociatedIcon) +HICON WINAPI ExtractAssociatedIconExA(HINSTANCE,LPSTR,LPWORD,LPWORD); +HICON WINAPI ExtractAssociatedIconExW(HINSTANCE,LPWSTR,LPWORD,LPWORD); +#define ExtractAssociatedIconEx WINELIB_NAME_AW(ExtractAssociatedIconEx) HICON WINAPI ExtractIconExA( LPCSTR, INT, HICON *, HICON *, UINT ); HICON WINAPI ExtractIconExW( LPCWSTR, INT, HICON *, HICON *, UINT ); #define ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)