EventLog. CreateEventSource не создает пользовательский журнал

#if и #define MY_MACRO (0)

Используя #if означают создание "определить" макроса, т.е. чего-то, что будет искаться в коде, который будет заменен" (0)". Это - "макро-ад", я очень не хочу видеть в C++, потому что это загрязняет код потенциальными модификациями кода.

, Например:

#define MY_MACRO (0)

int doSomething(int p_iValue)
{
   return p_iValue + 1 ;
}

int main(int argc, char **argv)
{
   int MY_MACRO = 25 ;
   doSomething(MY_MACRO) ;

   return 0;
}

дает следующую ошибку на g ++:

main.cpp|408|error: lvalue required as left operand of assignment|
||=== Build finished: 1 errors, 0 warnings ===|

[Только 1 123] один ошибка.

, Что означает, что Ваш макрос успешно взаимодействовал с Вашим кодом C++: вызов к функции был успешен. В этом простом случае это забавно. Но мой собственный опыт с макросами, играющими тихо с моим кодом, не полон радости и выполнения, таким образом...

#ifdef и #define MY_MACRO

Используя #ifdef означают, что Вы "определяете" что-то. Не то, чтобы Вы даете ему значение. Это все еще загрязняет, но по крайней мере, это не будет "заменяться ничем" и не рассматриваться кодом C++ как законный оператор кода. Тот же код выше, с простым определяют, это:

#define MY_MACRO

int doSomething(int p_iValue)
{
   return p_iValue + 1 ;
}

int main(int argc, char **argv)
{
   int MY_MACRO = 25 ;
   doSomething(MY_MACRO) ;

   return 0;
}

Дает соблюдающие предупреждения:

main.cpp||In function ‘int main(int, char**)’:|
main.cpp|406|error: expected unqualified-id before ‘=’ token|
main.cpp|399|error: too few arguments to function ‘int doSomething(int)’|
main.cpp|407|error: at this point in file|
||=== Build finished: 3 errors, 0 warnings ===|

Так...

Заключение

я жил бы без макросов в моем коде, но по нескольким причинам (определяющий защиту заголовка или макросы отладки), я не могу.

, Но по крайней мере, мне нравится делать их наименее взаимодействующим с моим законным кодом C++. Что означает использовать #define без значения, с помощью #ifdef, и #ifndef (или даже #if определенный, как предложил Jim Buck), и больше всего, давая им называет так долго и столь посторонний, никто в его правильном уме не будет использовать его "случайно", и что никоим образом это не будет влиять на законный код C++.

Scriptum

Сообщения Теперь, когда я перечитываю свое сообщение, интересно, не должен ли я пытаться найти некоторое значение, которое никогда никогда не будет корректным C++ для добавления к моему определять. Что-то как [1 120]

#define MY_MACRO @@@@@@@@@@@@@@@@@@

, который мог использоваться с #ifdef и #ifndef, но не позволять коду скомпилировать, если используется в функции... Я попробовал это успешно на g ++, и он дал ошибку:

main.cpp|410|error: stray ‘@’ in program|

Интересный.:-)

24
задан Jez 14 December 2009 в 14:46
поделиться

3 ответа

Возможно ли, что вы уже использовали источник «myApp» при записи в стандартный журнал приложений? Если это так, согласно MSDN:

Если источник уже был сопоставлен с журнал, и вы переназначаете его на новый журнал, вы должны перезагрузить компьютер для изменения вступят в силу.

http://msdn.microsoft.com/en-us/library/2awhba7a.aspx (примерно на полпути вниз по странице)

39
ответ дан 28 November 2019 в 23:18
поделиться

Возможно, вы забыли установить свойство Source в журнале событий.

Это должно выглядеть примерно так:

        if(!EventLog.SourceExists("MySource"))
        {
            EventLog.CreateEventSource("MySource", "MyNewLog");
        }

        EventLog myLog = new EventLog();
        myLog.Source = "MySource";

        myLog.WriteEntry("Writing to event log.");

Вот статья MSDN для справки.

4
ответ дан 28 November 2019 в 23:18
поделиться

Вы установили источник в журнале событий?

Из статьи MSDN .

Вы должны установить свойство Source в экземпляре компонента EventLog, прежде чем вы сможете писать записи в журнал. Когда ваш компонент записывает запись, система автоматически проверяет, зарегистрирован ли указанный вами источник в журнале событий, в который делает запись компонент, и при необходимости вызывает CreateEventSource. Как правило, создайте новый источник событий во время установки вашего приложения. Это дает операционной системе время для обновления списка зарегистрированных источников событий и их конфигурации. Если операционная система не обновила свой список источников событий и вы попытаетесь записать событие с новым источником, операция записи завершится ошибкой. Если создание источника во время установки невозможно, затем попробуйте создать источник задолго до первой операции записи, возможно, во время инициализации вашего приложения. Если вы выберете этот подход, убедитесь, что ваш код инициализации выполняется с правами администратора на компьютере. Эти права требуются для создания новых источников событий.

0
ответ дан 28 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: