Sto tentando di abilitare i controlli comuni in un'applicazione. Ho seguito i passaggi indicati in this MSDN article, in particolare nella sezione Using ComCtl32.dll Version 6 in an Application That Uses Only Standard Extensions. Ma non riesco a farlo funzionare.Come abilitare i controlli comuni in un'app di Windows
L'unica cosa che sto facendo in modo diverso dall'articolo è che aggiungo le informazioni manifest in Pagine delle proprietà del progetto | Proprietà di configurazione | Linker | File manifesto | Dipendenze addizionali manifest. Questo è ciò che io entro nella casella di testo:
"type = nome 'Win32' = versione 'Microsoft.Windows.Common-Controls' = '6.0.0.0' processorArchitecture = '*' publicKeyToken = '6595b64144ccf1df' language = '*' xmlns = 'http://schemas.microsoft.com/developer/msbuild/2003' ";% (AdditionalManifestDependencies)
Quando controllo il manifest generato (MyApp.exe.intermediate.manifest), sembra corretto.
Aggiungo anche una dipendenza da collegamento a ComCtl32.lib in Proprietà progetto | Proprietà di configurazione | Linker | Input | Dipendenze aggiuntive. Invito anche InitCommonControlsEx all'avvio con la struttura InitCommonControlsEx inizializzato in questo modo:
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_STANDARD_CLASSES;
Ma la chiamata a InitCommonControlsEx restituisce sempre false (il che significa che non). Dopo alcune indagini ho scoperto che il codice di errore restituito da GetLastError è ERROR_FILE_NOT_FOUND. Quale potrebbe essere il problema?
UPDATE: Ho notato qualcosa che potrebbe essere correlato al "file non trovato errore". Quando eseguo l'applicazione dal debugger, una delle linee nella finestra di output è:
'MyApp.exe': Loaded 'C: \ Windows \ winsxs \ x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.6002. 18305_none_88f3a38569c2c436 \ comctl32.dll', non riesce a trovare o aprire il file PDB
Tuttavia, ci sono un sacco di linee simili per alcune delle librerie più standard come kernel32.lib, user32.lib, ecc:
'MyApp.exe': caricato 'C: \ Windows \ System32 \ ntdll.dll', Impossibile trovare o aprire il PDB presentare
'MyApp.exe': Loaded 'C: \ Windows \ System32 \ kernel32.dll', Impossibile trovare o aprire il file PDB
'MyApp.exe': Loaded 'C: \ Windows \ System32 \ Msvcrt.dll', Impossibile trovare o aprire il file PDB
'MyApp.exe': Loaded 'C: \ Windows \ System32 \ user32.dll', Impossibile trovare o aprire il file di PDB
Quelle linee appaiono sempre per qualsiasi applicazione e non causano problemi. Potrebbe essere diverso per ComCtl32.dll?
Quindi farò l'ovvia domanda. Funziona * senza * le informazioni manifest aggiunte manualmente? – WhozCraig
@WhozCraig Provato, non ha funzionato. – user1610015
Hai considerato di chiamare InitCommonControls() (non l'Ex verson) come prima riga di WinMain. Non funzionerebbe? O stai cercando di ottenere uno dei nuovi stili visivi? – selbie