powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / FormatMessage
11 сообщений из 11, страница 1 из 1
FormatMessage
    #36730672
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то совсем туплю :\

Следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
void WriteLog ( LPCTSTR lpFmt, ... )
{
	va_list argList = NULL;
	va_start( argList, lpFmt );

	LPWSTR pBuffer = NULL;
    FormatMessage(FORMAT_MESSAGE_FROM_STRING |
                  FORMAT_MESSAGE_ALLOCATE_BUFFER,
                  lpFmt, 
                   0 ,
                   0 ,
                  (LPWSTR)&pBuffer, 
                   0 , 
                  &argList);
	AfxMessageBox(pBuffer);

	LocalFree(pBuffer);
	va_end( argList );

}

void CTest4Dlg::OnBnClickedButton1()
{
	WriteLog(L"param=%d",  1 );
}
Возвращает param=d, а хотелось бы param=1 :|||

В чем ошибка????
...
Рейтинг: 0 / 0
FormatMessage
    #36730702
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin,

а где va_arg?
...
Рейтинг: 0 / 0
FormatMessage
    #36730777
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка в том, что к сожалению формат printf(и других аналогичных функций) и FormatMessage РАЗЛИЧАЮТСЯ :(
Нужно писать:

Код: plaintext
1.
WriteLog(L"param=%1!d!",  1 );

To: Mozok
Когда не чего сказать - лучше помолчи.


Всем спасибо, тема закрыта.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FormatMessage
    #38889839
Calligraff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Нашел похожую тему, но немного на другой разновидности Си.

Подскажите пожалуйста ту же проблему для меня. Спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void WriteLog(const char* Msg, ... )
{
        // тут должен быть код который пишет данные в лог
        FILE* f;

        f = fopen("/var/log/clgsh.log", "a");
        if (f)
        {
                fprintf(f, "%s", Msg);
                fclose(f);
        }
}

int mail()
{
        WriteLog("Message %d\n", 123);
}



В итоге в файле вывода получаю:
Код: plaintext
Message %d

а не
Код: plaintext
Message 123

Понимаю, что в процедуре WriteLog не хватает кода, а какого не знаю.

Спасибо.
...
Рейтинг: 0 / 0
FormatMessage
    #38889860
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalligraffПонимаю, что в процедуре WriteLog не хватает кода, а какого не знаю.

Такого, который есть в любом примере к функции vprintf()/vsprintf().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FormatMessage
    #38889865
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
FormatMessage
    #38889880
Calligraff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТакого, который есть в любом примере к функции vprintf()/vsprintf().


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void WriteLog(const char* Msg, ... )
{

        FILE* f;

        f = fopen("/var/log/clgsh.log", "a");
        if (f)
        {
                va_list ptr;
                va_start(ptr, Msg);

                fprintf(f, "%s: %s", getTime(), vprintf(Msg, ptr));

                va_end(ptr);

                fclose(f);
        }



Чет вообще ничего не стал выводить
...
Рейтинг: 0 / 0
FormatMessage
    #38889889
Calligraff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void WriteLog(const char* Msg, ... )
{

        FILE* f;

        f = fopen("/var/log/clgsh.log", "a");
        if (f)
        {
                va_list ptr;
                va_start(ptr, Msg);

                vprintf(Msg, ptr);
                fprintf(f, "%s: %s", getTime(), Msg);

                va_end(ptr);

                fclose(f);
        }
}



Аналогично начальному варианту: "Message %d"

Действия функциий vprintf(), vfprintf(), vsprintf() и vsnprintf() эквивалентны действиям функций printf(), fprintf(), sprintf() и snprintf() соответственно, но список аргументов заменяется указателем на список аргументов.

int vsprintf(char *buf, const char *format, va_list arg_ptr);
...
Рейтинг: 0 / 0
FormatMessage
    #38889896
Calligraff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
void WriteLog(const char* Msg, ... )
{

        FILE* f;

        f = fopen("/var/log/clgsh.log", "a");
        if (f)
        {
                va_list ptr;
                va_start(ptr, Msg);

                char *Msg2;
                vsprintf(Msg2, Msg, ptr);
                fprintf(f, "%s: %s", getTime(), Msg2);

                va_end(ptr);

                fclose(f);
        }
}



А это дак вообще вот что в лог мне выдает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
/var/log/clgsh.log                                                                                                3105/19M                 0%
2015-02-26 20:12:33: [DAEMON] Signal: Segmentation fault, Addr: 0x0000000000000000
2015-02-26 20:12:33: == Backtrace ==
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(_IO_default_xsputn+0x64) [0xb75813f4]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(_IO_default_xsputn+0x64) [0xb75813f4]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(_IO_vfprintf+0xfc) [0xb755287c]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(vsprintf+0x8c) [0xb7575fcc]
2015-02-26 20:12:33: ./a.out() [0x8048e5b]
2015-02-26 20:12:33: ./a.out() [0x80491a6]
2015-02-26 20:12:33: ./a.out() [0x804938d]
2015-02-26 20:12:33: ./a.out() [0x8049570]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xb7529e46]
2015-02-26 20:12:33: ./a.out() [0x8048cf1]
2015-02-26 20:12:33: == End Backtrace ==
2015-02-26 20:12:33: [DAEMON] Signal: Segmentation fault, Addr: 0x0000000000000000
2015-02-26 20:12:33: == Backtrace ==
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(_IO_default_xsputn+0x64) [0xb75813f4]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(_IO_default_xsputn+0x64) [0xb75813f4]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(_IO_vfprintf+0xfc) [0xb755287c]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(vsprintf+0x8c) [0xb7575fcc]
2015-02-26 20:12:33: ./a.out() [0x8048e5b]
2015-02-26 20:12:33: ./a.out() [0x80491a6]
2015-02-26 20:12:33: ./a.out() [0x804938d]
2015-02-26 20:12:33: ./a.out() [0x8049570]
2015-02-26 20:12:33: /lib/i386-linux-gnu/i686/cmov/libc.so.6(__libc_start_main+0xe6) [0xb7529e46]

И прочий непонятный для меня текст
...
Рейтинг: 0 / 0
FormatMessage
    #38889918
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CalligraffА это дак вообще вот что в лог мне выдает:
Потому что тебе надо вернуться в азам и изучить работу с памятью.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FormatMessage
    #38890021
Calligraff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал....

Вот рабочий результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// функция записи лога
void WriteLog(const char* Msg, ... )
{

        FILE* f;

        f = fopen("/var/log/clgsh.log", "a");
        if (f)
        {
                va_list args;
                va_start(args, Msg);

                char buffer[256];
                vsprintf(buffer, Msg, args);
                fprintf(f, "%s: %s", getTime(), buffer);

                va_end(args);

                fclose(f);
        }
}



Спасибо что подсказали в какую сторону смотреть. :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / FormatMessage
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]