Gewusst wie WPP in statischen Bibliotheken verwenden?
Die WPP-Ablaufverfolgung kann innerhalb einer statischen Bibliothek so verwendet werden, dass eine separate Kontrolle über die Ablaufverfolgung zwischen der statischen Bibliothek (LIB) und der binären Bibliothek (.exe, .dll oder .sys) ermöglicht wird, die sie verwendet.
Sowohl die Binärdatei als auch die Bibliothek verfügen über eine eigene Steuerelement-GUID. Dadurch kann die Ablaufverfolgung in der statischen Bibliothek, in der Binärdatei oder in beiden Aktiviert werden.
Auf die LIB-Datei kann mithilfe von WPP an mehreren Stellen zugegriffen werden, wie im folgenden Codebeispiel gezeigt. Beachten Sie, dass es nicht wichtig ist, den tatsächlichen Wert der Steuerelement-GUID zu definieren, da die statische Bibliothek nicht das WPP_INIT_TRACING Makro aufruft, das die tatsächliche Registrierung bei ETW durchführt.
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(mylib,(0,0,0,0,0), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
)
Die .dll-, .exe- und .sys-Dateien, die die Bibliothek verwenden, müssen WPP_INIT_TRACING aufrufen, wodurch der Anbieter bei WPP registriert wird. Die Binärdatei, die das Makro WPP_INIT_TRACING aufruft, muss über eine Kopie der WPP-Steuerelement-GUIDs verfügen, die vom makro WPP_CONTROL_GUID abgerufen werden. Kopien der Flagwerte sind nur erforderlich, wenn die in der statischen Bibliothek definierten Flags auch in der Binärdatei verwendet werden sollen.
Im folgenden Codebeispiel wird zuerst die Steuerelement-GUID der statischen Bibliothek deklariert, und die Flags der Steuerelement-GUID entsprechen den Flags, die in der Bibliothek definiert sind:
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(SharedStaticLibs,(81b20feb,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
) \
WPP_DEFINE_CONTROL_GUID(AppSpecificFlags,(81b20fec,73a8,4b62,95bc,354477c97a6f), \
WPP_DEFINE_BIT(EntryExit) \
WPP_DEFINE_BIT(Initialization) \
WPP_DEFINE_BIT(MemoryAllocations) \
)
Sie können den Grad der Steuerung auswählen, den Sie für die Ablaufverfolgung sowohl für Ihre Komponente als auch für die statische Bibliothek benötigen, indem Sie entweder eine separate Steuerelement-GUID für die LIB- und die .exe-Dateien mit jeweils eigenen Flags oder eine Steuerelement-GUID für beide angeben. Im Beispiel verwendet die .exe-Datei dieselben Flags wie die LIB-Datei.