2013-05-22 9 views
8

xxx \ VC \ atlmfc \ include \ atlcore.h (638): errore C2039: “SetDefaultDllDirectories”: non è un membro di "global namespace"errore C2039: “SetDefaultDllDirectories”: non è un membro del namespace globale

#ifndef _USING_V110_SDK71_ 
    // the LOAD_LIBRARY_SEARCH_SYSTEM32 flag for LoadLibraryExW is only supported if the DLL-preload fixes are installed, so 
    // use LoadLibraryExW only if SetDefaultDllDirectories is available (only on Win8, or with KB2533623 on Vista and Win7)... 
    IFDYNAMICGETCACHEDFUNCTION(L"kernel32.dll", SetDefaultDllDirectories, pfSetDefaultDllDirectories) 
    { 
     return(::LoadLibraryExW(pszLibrary, NULL, LOAD_LIBRARY_SEARCH_SYSTEM32)); 
    } 
#endif 

le funzioni in esso non sono tutte realizzate da VS
quindi come posso risolvere questo problema?
C'è qualcosa che non va con il libray? Eseguo questo programma in VS2012

risposta

9

È necessario assicurarsi che "_USING_V110_SDK71_" sia definito nelle proprietà del progetto. Visual Studio lo definisce automaticamente per te. Normalmente non "mostra" perché "Eredita da padre o progetto predefinito" è deselezionata.

Ho trovato questo comune quando si esegue l'aggiornamento da vecchi progetti di atl che lo stdafx.cpp ha "Eredita da padre o progetto predefinito" non spuntato per qualche motivo.

Controllare sia le impostazioni del progetto sia le singole impostazioni del file stdafx.cpp per determinare che nelle Definizioni del preprocessore sia selezionata la casella di controllo "Eredita da padre o progetto predefinito". In alcuni casi, la finestra di dialogo Definizioni preprocessore del file Progetto viene verificata, tuttavia la finestra di dialogo Definizioni preprocessore dello specifico file stdafx.cpp NON è selezionata.

+1

Se le definizioni del preprocessore di risorse C/C++ e della risorsa sono personalizzate nella pagina delle proprietà del progetto, assicurarsi che terminino con __;% (PreprocessorDefinitions) __. Ciò ha causato un problema con un simbolo __ \ _ USING_V110_SDK71 \ ___ indefinito per un progetto migrato da VS2005 a VS2010 e ora VS2015 - questo mancava per le configurazioni di debug x86/x64 ma non per le configurazioni di rilascio. – UweBaemayr

+1

"Eredita dai valori predefiniti del genitore o del progetto" controlla se ";% (PreprocessorDefinitions)" è presente o meno. Se lo aggiungi/rimuovi manualmente, troverai le modifiche della casella di spunta. È più facile controllare il tickbox che ricordare ";% (PreprocessorDefinitions)" :) –

+0

Ah sì, capisco. Devi selezionare Modifica dal menu a discesa nelle Definizioni del preprocessore per vederlo. Ho pensato che ti stavi riferendo alla voce "" nel menu a discesa, che cancella le personalizzazioni. Non ho eseguito il drill abbastanza profondo e abbastanza sicuro, controllando/deselezionando le cause della casella;% (PreprocessorDefinitions) da aggiungere e rimuovere. – UweBaemayr

0

Ho riscontrato un problema simile con VS2008, non riconoscendo una funzione. L'ho risolto aggiungendo DDX_Control a DoDataExchange (CDataExchange * pDX).

-1
  1. Mettere seguenti righe comprendono tutte scatola

    $(VC_IncludePath)
    $(WindowsSDK_IncludePath)

  2. Deseleziona controllo "ereditare da genitore o di progetto di default"

3

Ho anche incontrato questo problema sopra su VS 2012.

Ciò è causato dal fatto che si utilizza Windows SDK 7.1 che manca della chiamata alla funzione SetDefaultDllDirectories in VS 2012 (VC11). È possibile notare che esiste una bandiera protetta #ifndef _USING_V110_SDK71_ per evitare l'utilizzo di SetDefaultDllDirectories non definito.

Basta definire _USING_V110_SDK71_ nel progetto per consentire a SDK di sapere che si trova in questo set di strumenti o di eseguire l'aggiornamento a una versione superiore di SDK.

1

Cambiare l'ordine di includere le directory e comprendeva cartella SDK funziona per me: $(IncludePath);C:\Program Files x86\Microsoft SDKs\Windows\v7.1A\Include

Se metto cartella C:\Program Files %28x86%29\Microsoft SDKs\Windows\v7.1A\Include prima $(IncludePath), mi metterò questo errore.

-1

Ho avuto lo stesso problema. questo trucco funziona per me. questo problema si presenta quando Visual Studio non può caricare correttamente l'ambiente di sviluppo. impossibile caricare variabili d'ambiente. così ho provato questo e funziona bene.

Passo # 1

prompt dei comandi di avvio di Visual Studio che si sta utilizzando

Passo # 2 eseguire questo comando.

devenv /useenv 

questo comando aprirà Visual Studio e quindi aprirà il tuo progetto e compilerà.

Problemi correlati