Dipende dai tipi di funzioni.
Per le normali funzioni (non COM), l'unico modo è utilizzare LoadLibrary
e GetProcAddress
. Se uno dei due fallisce, sai che il sistema operativo manca questa funzione. Scrivere quelle dichiarazioni di tipo puntatore di funzione per i puntatori di funzioni che duplicano le firme di funzioni esistenti può essere noioso, anche se in VC++ 2010 è possibile utilizzare decltype
per quello. Ad esempio:
HMODULE user32 = LoadLibraryW(L"user32");
if (user32 != NULL)
{
auto messageBoxW = reinterpret_cast<decltype(MessageBoxW)*>(GetProcAddress(user32, "MessageBoxW"));
if (messageBoxW != NULL)
{
messageBoxW(HWND_DESKTOP, L"Hello!", NULL, MB_OK);
}
}
Tuttavia, molte API Shell sono esposte tramite componenti COM e interfacce. Questi casi sono diversi.A volte devi occuparti di componenti completamente nuovi; per esempio. IApplicationDestinations
è una nuova interfaccia in Win7 e anche la coclasse che la implementa è nuova. In questi casi, è sufficiente eseguire CoCreateInstance
e verificare il valore restituito per REGDB_E_CLASSNOTREG
- ciò significa che tale coclasse non è registrata nel sistema (e, in effetti, non è supportata).
A volte, tuttavia, le nuove versioni del sistema operativo introducono nuove interfacce sulle coclasse esistenti. Un esempio è ITaskbarList3
, nuovo in Win7, ma fornito sulla coclasse esistente che implementa ITaskbarList
e risale a Win95. In questi casi, è necessario prima istanziare la coclasse per l'interfaccia di base, quindi utilizzare QueryInterface
per ottenere nuove versioni di interfaccia e rilevare che non sono supportate controllando il valore restituito per E_NOINTERFACE
.
fonte
2009-07-15 04:55:51
Sfortunatamente, MSDN non documenta , quale sistema ha introdotto una particolare chiamata API Windows. Documenta solo, le versioni supportate di Windows offrono una particolare chiamata API. A meno che la documentazione non sia stata aggiornata di recente, il client supportato non torna più indietro di Windows Vista al momento, anche se l'API esiste da decenni. – IInspectable