Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
76695731
Commit
76695731
authored
Apr 03, 2002
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Avoid local WINAPI function pointers to work around gcc bug.
parent
14c96c10
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
84 additions
and
102 deletions
+84
-102
ordinal.c
dlls/shlwapi/ordinal.c
+70
-91
ordinal.h
dlls/shlwapi/ordinal.h
+7
-5
path.c
dlls/shlwapi/path.c
+7
-6
No files found.
dlls/shlwapi/ordinal.c
View file @
76695731
...
...
@@ -114,6 +114,30 @@ static const SHL_2_inet_scheme shlwapi_schemes[] = {
{
0
,
0
}
};
/* function pointers for GET_FUNC macro; these need to be global because of gcc bug */
static
LPITEMIDLIST
(
WINAPI
*
pSHBrowseForFolderW
)(
LPBROWSEINFOW
);
static
HRESULT
(
WINAPI
*
pConvertINetUnicodeToMultiByte
)(
LPDWORD
,
DWORD
,
LPCWSTR
,
LPINT
,
LPSTR
,
LPINT
);
static
BOOL
(
WINAPI
*
pPlaySoundW
)(
LPCWSTR
,
HMODULE
,
DWORD
);
static
DWORD
(
WINAPI
*
pSHGetFileInfoW
)(
LPCWSTR
,
DWORD
,
SHFILEINFOW
*
,
UINT
,
UINT
);
static
UINT
(
WINAPI
*
pDragQueryFileW
)(
HDROP
,
UINT
,
LPWSTR
,
UINT
);
static
BOOL
(
WINAPI
*
pSHGetPathFromIDListW
)(
LPCITEMIDLIST
,
LPWSTR
);
static
BOOL
(
WINAPI
*
pShellExecuteExW
)(
LPSHELLEXECUTEINFOW
);
static
HICON
(
WINAPI
*
pSHFileOperationW
)(
LPSHFILEOPSTRUCTW
);
static
HICON
(
WINAPI
*
pExtractIconExW
)(
LPCWSTR
,
INT
,
HICON
*
,
HICON
*
,
UINT
);
static
BOOL
(
WINAPI
*
pSHGetNewLinkInfoW
)(
LPCWSTR
,
LPCWSTR
,
LPCWSTR
,
BOOL
*
,
UINT
);
static
DWORD
(
WINAPI
*
pSHDefExtractIconW
)(
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
);
/* FIXME: Correct args */
static
HICON
(
WINAPI
*
pExtractIconW
)(
HINSTANCE
,
LPCWSTR
,
UINT
);
static
BOOL
(
WINAPI
*
pGetSaveFileNameW
)(
LPOPENFILENAMEW
);
static
DWORD
(
WINAPI
*
pWNetRestoreConnectionW
)(
LPVOID
,
LPVOID
);
/* FIXME: Correct args */
static
DWORD
(
WINAPI
*
pWNetGetLastErrorW
)(
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
);
/* FIXME: Correct args */
static
BOOL
(
WINAPI
*
pPageSetupDlgW
)(
LPPAGESETUPDLGW
);
static
BOOL
(
WINAPI
*
pPrintDlgW
)(
LPPRINTDLGW
);
static
BOOL
(
WINAPI
*
pGetOpenFileNameW
)(
LPOPENFILENAMEW
);
static
HRESULT
(
WINAPI
*
pSHGetInstanceExplorer
)(
LPUNKNOWN
*
);
static
DWORD
(
WINAPI
*
pGetFileVersionInfoSizeW
)(
LPCWSTR
,
LPDWORD
);
static
BOOL
(
WINAPI
*
pGetFileVersionInfoW
)(
LPCWSTR
,
DWORD
,
DWORD
,
LPVOID
);
static
WORD
(
WINAPI
*
pVerQueryValueW
)(
LPVOID
,
LPCWSTR
,
LPVOID
*
,
UINT
*
);
/*
NOTES: Most functions exported by ordinal seem to be superflous.
The reason for these functions to be there is to provide a wraper
...
...
@@ -1363,7 +1387,6 @@ DWORD WINAPI SHLWAPI_215 (
INT
WINAPI
SHLWAPI_218
(
UINT
CodePage
,
LPCWSTR
lpSrcStr
,
LPSTR
lpDstStr
,
LPINT
lpnMultiCharCount
)
{
static
HRESULT
(
WINAPI
*
pfnFunc
)(
LPDWORD
,
DWORD
,
LPCWSTR
,
LPINT
,
LPSTR
,
LPINT
);
WCHAR
emptyW
[]
=
{
'\0'
};
int
len
,
reqLen
;
LPSTR
mem
;
...
...
@@ -1389,9 +1412,9 @@ INT WINAPI SHLWAPI_218(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr,
DWORD
dwMode
=
0
;
INT
nWideCharCount
=
len
-
1
;
GET_FUNC
(
mlang
,
"ConvertINetUnicodeToMultiByte"
,
0
);
if
(
!
p
fnFunc
(
&
dwMode
,
CodePage
,
lpSrcStr
,
&
nWideCharCount
,
lpDstStr
,
lpnMultiCharCount
))
GET_FUNC
(
pConvertINetUnicodeToMultiByte
,
mlang
,
"ConvertINetUnicodeToMultiByte"
,
0
);
if
(
!
p
ConvertINetUnicodeToMultiByte
(
&
dwMode
,
CodePage
,
lpSrcStr
,
&
nWideCharCount
,
lpDstStr
,
lpnMultiCharCount
))
return
0
;
if
(
nWideCharCount
<
len
-
1
)
...
...
@@ -1402,7 +1425,7 @@ INT WINAPI SHLWAPI_218(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr,
*
lpnMultiCharCount
=
0
;
if
(
p
fnFunc
(
&
dwMode
,
CodePage
,
lpSrcStr
,
&
len
,
mem
,
lpnMultiCharCount
))
if
(
p
ConvertINetUnicodeToMultiByte
(
&
dwMode
,
CodePage
,
lpSrcStr
,
&
len
,
mem
,
lpnMultiCharCount
))
{
SHLWAPI_162
(
mem
,
*
lpnMultiCharCount
);
lstrcpynA
(
lpDstStr
,
mem
,
*
lpnMultiCharCount
+
1
);
...
...
@@ -1746,10 +1769,8 @@ HWND WINAPI SHLWAPI_278 (
*/
BOOL
WINAPI
SHLWAPI_289
(
LPCWSTR
pszSound
,
HMODULE
hmod
,
DWORD
fdwSound
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPCWSTR
,
HMODULE
,
DWORD
)
=
NULL
;
GET_FUNC
(
winmm
,
"PlaySoundW"
,
FALSE
);
return
pfnFunc
(
pszSound
,
hmod
,
fdwSound
);
GET_FUNC
(
pPlaySoundW
,
winmm
,
"PlaySoundW"
,
FALSE
);
return
pPlaySoundW
(
pszSound
,
hmod
,
fdwSound
);
}
/*************************************************************************
...
...
@@ -1784,10 +1805,8 @@ BOOL WINAPI SHLWAPI_294(LPSTR str1, LPSTR str2, LPSTR pStr, DWORD some_len, LPC
DWORD
WINAPI
SHLWAPI_313
(
LPCWSTR
path
,
DWORD
dwFileAttributes
,
SHFILEINFOW
*
psfi
,
UINT
sizeofpsfi
,
UINT
flags
)
{
static
DWORD
(
WINAPI
*
pfnFunc
)(
LPCWSTR
,
DWORD
,
SHFILEINFOW
*
,
UINT
,
UINT
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHGetFileInfoW"
,
0
);
return
pfnFunc
(
path
,
dwFileAttributes
,
psfi
,
sizeofpsfi
,
flags
);
GET_FUNC
(
pSHGetFileInfoW
,
shell32
,
"SHGetFileInfoW"
,
0
);
return
pSHGetFileInfoW
(
path
,
dwFileAttributes
,
psfi
,
sizeofpsfi
,
flags
);
}
/*************************************************************************
...
...
@@ -1797,10 +1816,8 @@ DWORD WINAPI SHLWAPI_313(LPCWSTR path, DWORD dwFileAttributes,
*/
UINT
WINAPI
SHLWAPI_318
(
HDROP
hDrop
,
UINT
lFile
,
LPWSTR
lpszFile
,
UINT
lLength
)
{
static
UINT
(
WINAPI
*
pfnFunc
)(
HDROP
,
UINT
,
LPWSTR
,
UINT
)
=
NULL
;
GET_FUNC
(
shell32
,
"DragQueryFileW"
,
0
);
return
pfnFunc
(
hDrop
,
lFile
,
lpszFile
,
lLength
);
GET_FUNC
(
pDragQueryFileW
,
shell32
,
"DragQueryFileW"
,
0
);
return
pDragQueryFileW
(
hDrop
,
lFile
,
lpszFile
,
lLength
);
}
/*************************************************************************
...
...
@@ -1810,10 +1827,8 @@ UINT WINAPI SHLWAPI_318(HDROP hDrop, UINT lFile, LPWSTR lpszFile, UINT lLength)
*/
LPITEMIDLIST
WINAPI
SHLWAPI_333
(
LPBROWSEINFOW
lpBi
)
{
static
LPITEMIDLIST
(
WINAPI
*
pfnFunc
)(
LPBROWSEINFOW
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHBrowseForFolderW"
,
NULL
);
return
pfnFunc
(
lpBi
);
GET_FUNC
(
pSHBrowseForFolderW
,
shell32
,
"SHBrowseForFolderW"
,
NULL
);
return
pSHBrowseForFolderW
(
lpBi
);
}
/*************************************************************************
...
...
@@ -1823,10 +1838,8 @@ LPITEMIDLIST WINAPI SHLWAPI_333(LPBROWSEINFOW lpBi)
*/
BOOL
WINAPI
SHLWAPI_334
(
LPCITEMIDLIST
pidl
,
LPWSTR
pszPath
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPCITEMIDLIST
,
LPWSTR
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHGetPathFromIDListW"
,
0
);
return
pfnFunc
(
pidl
,
pszPath
);
GET_FUNC
(
pSHGetPathFromIDListW
,
shell32
,
"SHGetPathFromIDListW"
,
0
);
return
pSHGetPathFromIDListW
(
pidl
,
pszPath
);
}
/*************************************************************************
...
...
@@ -1836,10 +1849,8 @@ BOOL WINAPI SHLWAPI_334(LPCITEMIDLIST pidl,LPWSTR pszPath)
*/
BOOL
WINAPI
SHLWAPI_335
(
LPSHELLEXECUTEINFOW
lpExecInfo
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPSHELLEXECUTEINFOW
)
=
NULL
;
GET_FUNC
(
shell32
,
"ShellExecuteExW"
,
FALSE
);
return
pfnFunc
(
lpExecInfo
);
GET_FUNC
(
pShellExecuteExW
,
shell32
,
"ShellExecuteExW"
,
FALSE
);
return
pShellExecuteExW
(
lpExecInfo
);
}
/*************************************************************************
...
...
@@ -1849,10 +1860,8 @@ BOOL WINAPI SHLWAPI_335(LPSHELLEXECUTEINFOW lpExecInfo)
*/
DWORD
WINAPI
SHLWAPI_336
(
LPSHFILEOPSTRUCTW
lpFileOp
)
{
static
HICON
(
WINAPI
*
pfnFunc
)(
LPSHFILEOPSTRUCTW
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHFileOperationW"
,
0
);
return
pfnFunc
(
lpFileOp
);
GET_FUNC
(
pSHFileOperationW
,
shell32
,
"SHFileOperationW"
,
0
);
return
pSHFileOperationW
(
lpFileOp
);
}
/*************************************************************************
...
...
@@ -1863,10 +1872,8 @@ DWORD WINAPI SHLWAPI_336(LPSHFILEOPSTRUCTW lpFileOp)
HICON
WINAPI
SHLWAPI_337
(
LPCWSTR
lpszFile
,
INT
nIconIndex
,
HICON
*
phiconLarge
,
HICON
*
phiconSmall
,
UINT
nIcons
)
{
static
HICON
(
WINAPI
*
pfnFunc
)(
LPCWSTR
,
INT
,
HICON
*
,
HICON
*
,
UINT
)
=
NULL
;
GET_FUNC
(
shell32
,
"ExtractIconExW"
,
(
HICON
)
0
);
return
pfnFunc
(
lpszFile
,
nIconIndex
,
phiconLarge
,
phiconSmall
,
nIcons
);
GET_FUNC
(
pExtractIconExW
,
shell32
,
"ExtractIconExW"
,
(
HICON
)
0
);
return
pExtractIconExW
(
lpszFile
,
nIconIndex
,
phiconLarge
,
phiconSmall
,
nIcons
);
}
/*************************************************************************
...
...
@@ -1900,11 +1907,10 @@ DWORD WINAPI SHLWAPI_350 (
LPWSTR
x
,
LPVOID
y
)
{
static
DWORD
WINAPI
(
*
pfnFunc
)(
LPCWSTR
,
LPDWORD
)
=
NULL
;
DWORD
ret
;
GET_FUNC
(
version
,
"GetFileVersionInfoSizeW"
,
0
);
ret
=
p
fnFunc
(
x
,
y
);
GET_FUNC
(
pGetFileVersionInfoSizeW
,
version
,
"GetFileVersionInfoSizeW"
,
0
);
ret
=
p
GetFileVersionInfoSizeW
(
x
,
y
);
return
0x208
+
ret
;
}
...
...
@@ -1919,10 +1925,8 @@ BOOL WINAPI SHLWAPI_351 (
DWORD
y
,
/* [in] return value from .350 - assume length */
LPVOID
z
)
/* [in/out] buffer (+0x208 sent to GetFileVersionInfoA) */
{
static
BOOL
WINAPI
(
*
pfnFunc
)(
LPCWSTR
,
DWORD
,
DWORD
,
LPVOID
)
=
NULL
;
GET_FUNC
(
version
,
"GetFileVersionInfoW"
,
0
);
return
pfnFunc
(
w
,
x
,
y
-
0x208
,
z
+
0x208
);
GET_FUNC
(
pGetFileVersionInfoW
,
version
,
"GetFileVersionInfoW"
,
0
);
return
pGetFileVersionInfoW
(
w
,
x
,
y
-
0x208
,
z
+
0x208
);
}
/*************************************************************************
...
...
@@ -1937,10 +1941,8 @@ WORD WINAPI SHLWAPI_352 (
LPVOID
y
,
/* [out] ver buffer - passed to VerQueryValueA as #3 */
UINT
*
z
)
/* [in] ver length - passed to VerQueryValueA as #4 */
{
static
WORD
WINAPI
(
*
pfnFunc
)(
LPVOID
,
LPCWSTR
,
LPVOID
*
,
UINT
*
)
=
NULL
;
GET_FUNC
(
version
,
"VerQueryValueW"
,
0
);
return
pfnFunc
(
w
+
0x208
,
x
,
y
,
z
);
GET_FUNC
(
pVerQueryValueW
,
version
,
"VerQueryValueW"
,
0
);
return
pVerQueryValueW
(
w
+
0x208
,
x
,
y
,
z
);
}
/**************************************************************************
...
...
@@ -1975,10 +1977,8 @@ DWORD WINAPI SHLWAPI_356(PACL pDacl, PSECURITY_DESCRIPTOR pSD, LPCSTR *str)
BOOL
WINAPI
SHLWAPI_357
(
LPCWSTR
pszLinkTo
,
LPCWSTR
pszDir
,
LPWSTR
pszName
,
BOOL
*
pfMustCopy
,
UINT
uFlags
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPCWSTR
,
LPCWSTR
,
LPCWSTR
,
BOOL
*
,
UINT
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHGetNewLinkInfoW"
,
FALSE
);
return
pfnFunc
(
pszLinkTo
,
pszDir
,
pszName
,
pfMustCopy
,
uFlags
);
GET_FUNC
(
pSHGetNewLinkInfoW
,
shell32
,
"SHGetNewLinkInfoW"
,
FALSE
);
return
pSHGetNewLinkInfoW
(
pszLinkTo
,
pszDir
,
pszName
,
pfMustCopy
,
uFlags
);
}
/*************************************************************************
...
...
@@ -1989,11 +1989,8 @@ BOOL WINAPI SHLWAPI_357(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName,
DWORD
WINAPI
SHLWAPI_358
(
LPVOID
arg1
,
LPVOID
arg2
,
LPVOID
arg3
,
LPVOID
arg4
,
LPVOID
arg5
,
LPVOID
arg6
)
{
/* FIXME: Correct args */
static
DWORD
(
WINAPI
*
pfnFunc
)(
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHDefExtractIconW"
,
0
);
return
pfnFunc
(
arg1
,
arg2
,
arg3
,
arg4
,
arg5
,
arg6
);
GET_FUNC
(
pSHDefExtractIconW
,
shell32
,
"SHDefExtractIconW"
,
0
);
return
pSHDefExtractIconW
(
arg1
,
arg2
,
arg3
,
arg4
,
arg5
,
arg6
);
}
/*************************************************************************
...
...
@@ -2015,10 +2012,8 @@ DWORD WINAPI SHLWAPI_364(LPCSTR src, LPSTR dst, INT n)
HICON
WINAPI
SHLWAPI_370
(
HINSTANCE
hInstance
,
LPCWSTR
lpszExeFileName
,
UINT
nIconIndex
)
{
static
HICON
(
WINAPI
*
pfnFunc
)(
HINSTANCE
,
LPCWSTR
,
UINT
)
=
NULL
;
GET_FUNC
(
shell32
,
"ExtractIconW"
,
(
HICON
)
0
);
return
pfnFunc
(
hInstance
,
lpszExeFileName
,
nIconIndex
);
GET_FUNC
(
pExtractIconW
,
shell32
,
"ExtractIconW"
,
(
HICON
)
0
);
return
pExtractIconW
(
hInstance
,
lpszExeFileName
,
nIconIndex
);
}
/*************************************************************************
...
...
@@ -2099,10 +2094,8 @@ DWORD WINAPI SHLWAPI_378 (
*/
BOOL
WINAPI
SHLWAPI_389
(
LPOPENFILENAMEW
ofn
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPOPENFILENAMEW
)
=
NULL
;
GET_FUNC
(
comdlg32
,
"GetSaveFileNameW"
,
FALSE
);
return
pfnFunc
(
ofn
);
GET_FUNC
(
pGetSaveFileNameW
,
comdlg32
,
"GetSaveFileNameW"
,
FALSE
);
return
pGetSaveFileNameW
(
ofn
);
}
/*************************************************************************
...
...
@@ -2112,11 +2105,8 @@ BOOL WINAPI SHLWAPI_389(LPOPENFILENAMEW ofn)
*/
DWORD
WINAPI
SHLWAPI_390
(
LPVOID
arg1
,
LPVOID
arg2
)
{
/* FIXME: Correct args */
static
DWORD
(
WINAPI
*
pfnFunc
)(
LPVOID
,
LPVOID
)
=
NULL
;
GET_FUNC
(
mpr
,
"WNetRestoreConnectionW"
,
0
);
return
pfnFunc
(
arg1
,
arg2
);
GET_FUNC
(
pWNetRestoreConnectionW
,
mpr
,
"WNetRestoreConnectionW"
,
0
);
return
pWNetRestoreConnectionW
(
arg1
,
arg2
);
}
/*************************************************************************
...
...
@@ -2127,11 +2117,8 @@ DWORD WINAPI SHLWAPI_390(LPVOID arg1, LPVOID arg2)
DWORD
WINAPI
SHLWAPI_391
(
LPVOID
arg1
,
LPVOID
arg2
,
LPVOID
arg3
,
LPVOID
arg4
,
LPVOID
arg5
)
{
/* FIXME: Correct args */
static
DWORD
(
WINAPI
*
pfnFunc
)(
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
,
LPVOID
)
=
NULL
;
GET_FUNC
(
mpr
,
"WNetGetLastErrorW"
,
0
);
return
pfnFunc
(
arg1
,
arg2
,
arg3
,
arg4
,
arg5
);
GET_FUNC
(
pWNetGetLastErrorW
,
mpr
,
"WNetGetLastErrorW"
,
0
);
return
pWNetGetLastErrorW
(
arg1
,
arg2
,
arg3
,
arg4
,
arg5
);
}
/*************************************************************************
...
...
@@ -2141,10 +2128,8 @@ DWORD WINAPI SHLWAPI_391(LPVOID arg1, LPVOID arg2, LPVOID arg3, LPVOID arg4,
*/
BOOL
WINAPI
SHLWAPI_401
(
LPPAGESETUPDLGW
pagedlg
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPPAGESETUPDLGW
)
=
NULL
;
GET_FUNC
(
comdlg32
,
"PageSetupDlgW"
,
FALSE
);
return
pfnFunc
(
pagedlg
);
GET_FUNC
(
pPageSetupDlgW
,
comdlg32
,
"PageSetupDlgW"
,
FALSE
);
return
pPageSetupDlgW
(
pagedlg
);
}
/*************************************************************************
...
...
@@ -2154,10 +2139,8 @@ BOOL WINAPI SHLWAPI_401(LPPAGESETUPDLGW pagedlg)
*/
BOOL
WINAPI
SHLWAPI_402
(
LPPRINTDLGW
printdlg
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPPRINTDLGW
)
=
NULL
;
GET_FUNC
(
comdlg32
,
"PrintDlgW"
,
FALSE
);
return
pfnFunc
(
printdlg
);
GET_FUNC
(
pPrintDlgW
,
comdlg32
,
"PrintDlgW"
,
FALSE
);
return
pPrintDlgW
(
printdlg
);
}
/*************************************************************************
...
...
@@ -2167,10 +2150,8 @@ BOOL WINAPI SHLWAPI_402(LPPRINTDLGW printdlg)
*/
BOOL
WINAPI
SHLWAPI_403
(
LPOPENFILENAMEW
ofn
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
LPOPENFILENAMEW
)
=
NULL
;
GET_FUNC
(
comdlg32
,
"GetOpenFileNameW"
,
FALSE
);
return
pfnFunc
(
ofn
);
GET_FUNC
(
pGetOpenFileNameW
,
comdlg32
,
"GetOpenFileNameW"
,
FALSE
);
return
pGetOpenFileNameW
(
ofn
);
}
/* INTERNAL: Map from HLS color space to RGB */
...
...
@@ -2450,10 +2431,8 @@ INT WINAPI GetMenuPosFromID(HMENU hMenu, UINT wID)
*/
HRESULT
WINAPI
_SHGetInstanceExplorer
(
LPUNKNOWN
*
lpUnknown
)
{
static
HRESULT
(
WINAPI
*
pfnFunc
)(
LPUNKNOWN
*
)
=
NULL
;
GET_FUNC
(
shell32
,
"SHGetInstanceExplorer"
,
E_FAIL
);
return
pfnFunc
(
lpUnknown
);
GET_FUNC
(
pSHGetInstanceExplorer
,
shell32
,
"SHGetInstanceExplorer"
,
E_FAIL
);
return
pSHGetInstanceExplorer
(
lpUnknown
);
}
/*************************************************************************
...
...
dlls/shlwapi/ordinal.h
View file @
76695731
...
...
@@ -44,11 +44,13 @@ typedef struct {
DWORD
WINAPI
SHLWAPI_2
(
LPCWSTR
x
,
UNKNOWN_SHLWAPI_2
*
y
);
/* Macro to get function pointer for a module*/
#define GET_FUNC(module, name, fail) \
if (!SHLWAPI_h##module) SHLWAPI_h##module = LoadLibraryA(#module ".dll"); \
if (!SHLWAPI_h##module) return fail; \
if (!pfnFunc) pfnFunc = (void*)GetProcAddress(SHLWAPI_h##module, name); \
if (!pfnFunc) return fail
#define GET_FUNC(func, module, name, fail) \
do { \
if (!func) { \
if (!SHLWAPI_h##module && !(SHLWAPI_h##module = LoadLibraryA(#module ".dll"))) return fail; \
if (!(func = (void*)GetProcAddress(SHLWAPI_h##module, name))) return fail; \
} \
} while (0)
extern
HMODULE
SHLWAPI_hshell32
;
...
...
dlls/shlwapi/path.c
View file @
76695731
...
...
@@ -36,6 +36,9 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
shell
);
/* function pointers for GET_FUNC macro; these need to be global because of gcc bug */
static
BOOL
(
WINAPI
*
pIsNetDrive
)(
DWORD
);
/*************************************************************************
* PathAppendA [SHLWAPI.@]
*
...
...
@@ -3313,7 +3316,6 @@ VOID WINAPI PathSetDlgItemPathW(HWND hDlg, int id, LPCWSTR lpszPath)
*/
BOOL
WINAPI
PathIsNetworkPathA
(
LPCSTR
lpszPath
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
DWORD
);
DWORD
dwDriveNum
;
TRACE
(
"(%s)
\n
"
,
debugstr_a
(
lpszPath
));
...
...
@@ -3325,8 +3327,8 @@ BOOL WINAPI PathIsNetworkPathA(LPCSTR lpszPath)
dwDriveNum
=
PathGetDriveNumberA
(
lpszPath
);
if
(
dwDriveNum
==
-
1
)
return
FALSE
;
GET_FUNC
(
shell32
,
(
LPCSTR
)
66
,
FALSE
);
/* ord 66 = shell32.IsNetDrive */
return
p
fnFunc
(
dwDriveNum
);
GET_FUNC
(
pIsNetDrive
,
shell32
,
(
LPCSTR
)
66
,
FALSE
);
/* ord 66 = shell32.IsNetDrive */
return
p
IsNetDrive
(
dwDriveNum
);
}
/*************************************************************************
...
...
@@ -3336,7 +3338,6 @@ BOOL WINAPI PathIsNetworkPathA(LPCSTR lpszPath)
*/
BOOL
WINAPI
PathIsNetworkPathW
(
LPCWSTR
lpszPath
)
{
static
BOOL
(
WINAPI
*
pfnFunc
)(
DWORD
);
DWORD
dwDriveNum
;
TRACE
(
"(%s)
\n
"
,
debugstr_w
(
lpszPath
));
...
...
@@ -3348,8 +3349,8 @@ BOOL WINAPI PathIsNetworkPathW(LPCWSTR lpszPath)
dwDriveNum
=
PathGetDriveNumberW
(
lpszPath
);
if
(
dwDriveNum
==
-
1
)
return
FALSE
;
GET_FUNC
(
shell32
,
(
LPCSTR
)
66
,
FALSE
);
/* ord 66 = shell32.IsNetDrive */
return
p
fnFunc
(
dwDriveNum
);
GET_FUNC
(
pIsNetDrive
,
shell32
,
(
LPCSTR
)
66
,
FALSE
);
/* ord 66 = shell32.IsNetDrive */
return
p
IsNetDrive
(
dwDriveNum
);
}
/*************************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment