Comctl32.dll
ld \Windows\System32\comctl32.dll --output-def=comctl32.def
не показывает DSA_Sort()
, хотя в документации сказано, что оно должно быть там.
DSA_Sort
https://docs.microsoft.com/en-us/windows/desktop/api/dpa_dsa/nf-dpa_dsa-dsa_sort
Lib: ComCtl32.dll
BOOL DSA_Sort(
HDSA pdsa,
PFNDACOMPARE pfnCompare,
LPARAM lParam
);
dsa_dsa.h
\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\dpa_dsa.h
определяет DSA_Sort()
так же, как MinGW commctrl.h
.
Но dpa_dsa.h
имеет #include "dpa_dsa.inl"
, если определено ISOLATION_AWARE_ENABLED
,
который MinGW не поддерживает (https://sourceforge.net/p/mingw-w64/feature-requests/44/).
\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um\dpa_dsa.inl
содержит:
#define DSA_Sort IsolationAwareDSA_Sort
и имеет эту встроенную реализацию:
ISOLATION_AWARE_INLINE BOOL IsolationAwarePrivatenCv IsolationAwareDSA_Sort(_Inout_ HDSA pdsa,_In_ PFNDACOMPARE pfnCompare,_In_ LPARAM lParam)
{
BOOL fResult = FALSE;
typedef BOOL (WINAPI* PFN)(_Inout_ HDSA pdsa,_In_ PFNDACOMPARE pfnCompare,_In_ LPARAM lParam);
static PFN s_pfn;
PFN __IsolationAware_pfn = s_pfn;
ULONG_PTR ulpCookie = 0;
const BOOL fActivateActCtxSuccess =
IsolationAwarePrivateT_SAbnPgpgk ||
IsolationAwarePrivateT_SqbjaYRiRY ||
IsolationAwarePrivatenPgViNgRzlnPgpgk(&ulpCookie);
if (!fActivateActCtxSuccess)
return fResult;
__try
{
if (__IsolationAware_pfn == NULL)
{
__IsolationAware_pfn = (PFN) Dpa_dsaIsolationAwarePrivatetRgCebPnQQeRff_pbZPgYQP_QYY("DSA_Sort");
if (__IsolationAware_pfn == NULL)
__leave;
s_pfn = __IsolationAware_pfn;
}
fResult = __IsolationAware_pfn(pdsa,pfnCompare,lParam);
}
__finally
{
if (!IsolationAwarePrivateT_SAbnPgpgk
|| !IsolationAwarePrivateT_SqbjaYRiRY
)
{
const BOOL fPreserveLastError = (fResult == FALSE);
const DWORD dwLastError = fPreserveLastError ? GetLastError() : NO_ERROR;
(void)IsolationAwareDeactivateActCtx(0, ulpCookie);
if (fPreserveLastError)
SetLastError(dwLastError);
}
}
return fResult;
}
С
#if !ISOLATION_AWARE_USE_STATIC_LIBRARY
FARPROC IsolationAwarePrivatenCv Dpa_dsaIsolationAwarePrivatetRgCebPnQQeRff_pbZPgYQP_QYY(LPCSTR pszProcName);
#endif /* ISOLATION_AWARE_USE_STATIC_LIBRARY */
Похоже, что Windows API явно скрывает эту функцию от MinGW.
Смотри также:
https://www.geoffchappell.com/studies/windows/shell/comctl32/api/da/dsa/index.htm