Мне необходимо использовать функционал Windows Event Log. Для доступа к функция данного API нужно добавить dll к проекту. Я добавил в .pro файл следующее:
LIBS += -lws2_32 \
c:/windows/System32/wevtapi.dll \
c:/Windows/System32/kernel32.dll \
После чего на всякий случай добавил wevtapi.h
и #pragma comment(lib, "Wevtapi.lib")
везде где необходимо.
Но MinGW в упор не видит функций и типов:
EvtOpenChannelEnum
EvtNextChannelPath
PEVT_VARIANT
Выдаёт ошибку
'EvtOpenChannelEnum' was not declared in this scope hChannels = EvtOpenChannelEnum(NULL, 0);
Что я делаю не так?
код:
#include <QCoreApplication>
#include <windows.h>
#include <sddl.h>
#include <stdio.h>
#include <winevt.h>
#include <QCoreApplication>
#include <winsock2.h>
#include <windows.h>
#include <sddl.h>
#include <stdio.h>
#include <winevt.h>
#include <iostream>
#include <string>
#include <vector>
#pragma comment(lib, "Wevtapi.lib")
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
EVT_HANDLE hChannels = NULL;
hChannels = EvtOpenChannelEnum(NULL, 0);
return a.exec();
}
.pro
QT += core
QT -= gui
LIBS += -lws2_32 \
c:/windows/System32/wevtapi.dll \
c:/Windows/System32/kernel32.dll \
c:/Windows/System32/shlwapi.dll
LIBS += -lws2_32 -lkernel32 -lwevtapi -lshlwapi
CONFIG += c++11
TARGET = untitled7
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
Необходимые Вам функции и типы объявлены в заголовочном файле winevt.h
. Однако, они "обёрнуты" в #if (_WIN32_WINNT >= 0x0600)
. Значение 0x0600
означает, что они доступны только на Windows Vista и выше. Поэтому необходимо перед всеми включаемыми файлами определить константу _WIN32_WINNT
. Тогда код примет следующий вид:
#define _WIN32_WINNT 0x0600
#include <QCoreApplication>
#include <windows.h>
#include <winevt.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
EVT_HANDLE hChannels = NULL;
hChannels = EvtOpenChannelEnum(NULL, 0);
return a.exec();
}
Впрочем, можно не "засорять" исходные тексты такими определениями и добавить в .pro
-файл следующую строку:
DEFINES += _WIN32_WINNT=0x0600
Далее, требуемые функции реализованы в динамической библиотеке (DLL) wevtapi
, поэтому нужно явно указать компоновщику на необходимость её использования, добавив в тот же .pro
-файл следующее:
LIBS += -lwevtapi
Теперь компоновщик при сборке .exe
-файла проекта будет использовать также файл libwevtapi.a
, в котором сказано, что функции находятся в библиотеке wevtapi.dll
. Тем самым компоновщик добавит информацию о необходимости подключения этой библиотеки к исполняемому файлу.
есть ли возможность назначить адрес функции в IDA PRO? имеется такая функция
Есть 4 таблицы связанные между собой по id иерархически юзеры->телефоны->сайты->налог и есть входящий массив данных в котором присутствует...