вывести юникодное имя функции в юникоде
От: Graf Alex Украина http://grafalex.oberon.kiev.ua
Дата: 06.09.07 08:35
Оценка:
Есть необходимость в лог писать имя функции, которая упала...

Есть код, который во всяком случае компиляется...

итак:

#ifdef WIN32
    #define MRSWIDEN2(x) L ## x
#else
    #define MRSWIDEN2(x) L ## #x
#endif

#define MRSWIDEN(x)  MRSWIDEN2(x)

#ifdef WIN32
    #define __WMRSFUNC__ MRSWIDEN(__FUNCTION__)
#else //!WIN32
    #define __WMRSFUNC__ MRSWIDEN(__PRETTY_FUNCTION__)
#endif // WIN32

#define ERR_LOG(log, res, msg_err)                                          \
    log.AddMessage(res, __WMRSFUNC__ L" : " msg_err);

...
if (mrsResult != MRS_OK)
{
    ERR_LOG(m_AppLog, mrsResult, L"Can't read Product table");
}


Под виндой все работает нормально...
под линухом после препроцессора получается чтото типа:

m_AppLog.AddMessage(mrsResult, L"__PRETTY_FUNCTION__" L" : " L"Can't read Product table");


такой вариант мне, конечно не подходит

если объявить так (так же как в виндовой ветке):

#define MRSWIDEN2(x) L ## x

то имеем после препроцессора код
m_AppLog.AddMessage(mrsResult, L__PRETTY_FUNCTION__ L" : " L"Can't read Product table");


Само собой, что это тоже не канает, т.к. компилер не может найти L__PRETTY_FUNCTION__

Как мне подправить этот код?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.