Comment corriger les erreurs de build TraceLogging

Cette rubrique décrit certaines erreurs de build courantes et explique comment les résoudre.

Cas 1 : erreurs « DECLSPEC_SAFEBUFFERS »

Erreur de build (extrait de code) :

1>traceloggingprovider.h(1592): error C2146: syntax error : missing ';' before identifier 'TLG_STATUS'
1>traceloggingprovider.h(1592): error C2433: 'DECLSPEC_SAFEBUFFERS' : 'inline' not permitted on data declarations
1>traceloggingprovider.h(1592): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Difficulté:
Incluez windows.h avant d’inclure TraceLoggingProvider.h dans votre fichier source.

Cas 2 : TraceLogging dans les applications C++ modernes

Erreur de build (extrait de code) :
Après avoir copié les fichiers d’en-tête TraceLogging dans votre environnement de build et ajouté cette ligne :

TraceLoggingRegisterByGuid(g_3DBuilderTraceProvider, &s_3DBuilderTraceProviderGuid);

Vous avez obtenu cette erreur de l’éditeur de liens :

Error 2 error LNK2001: unresolved external symbol __imp__EventSetInformation@20 
        E:\TFS\Main\PrintPreviewR5\Viewers\PrintPreview\App.xaml.obj    PrintPreview
Error 3 error LNK2001: unresolved external symbol __imp__EventRegister@16       
        E:\TFS\Main\PrintPreviewR5\Viewers\PrintPreview\App.xaml.obj    PrintPreview

Difficulté:
Les applications UWP doivent être liées à advapi32.lib pour résoudre ce problème de référence.

Cas 3 : Builds de téléphone

Erreur de build (extrait de code) :
Lors de la compilation du fichier dictationuimodel.cpp, vous obtenez l’erreur :

traceloggingprovider.h(1592) : error C2146: syntax error : missing ';' before identifier 'TLG_STATUS'
traceloggingprovider.h(1592) : error C2433: 'DECLSPEC_SAFEBUFFERS' : 'inline' not permitted on data declarations

Difficulté:
Voir Cas n° 1. Il est probable que votre SDK ne définit pas la macro DECLSPEC_SAFEBUFFERS. Les kits SDK à jour ont une définition pour cette macro. Si votre SDK ne définit pas cette macro, vous devez fournir votre propre définition. DECLSPEC_SAFEBUFFERS est défini dans winnt.h, qui doit être inclus par windows.h. En outre, jusqu’à la publication publique du Kit de développement logiciel (SDK) Windows 10, vous devrez peut-être définir le mot clé de télémétrie :

#ifndef WINEVENT_KEYWORD_TELEMETRY 
#define WINEVENT_KEYWORD_TELEMETRY  0x2000000000000
#endif