Широкие персонажи Pantheios?

Я пытаюсь интегрировать ведение журнала в свое приложение Windows C++, и я хотел использовать Pantheios, так как у него обычно очень положительные отзывы. Тем не менее, все включенные примеры используют макросы, такие как PANTHEIOS_LITERAL_STRING и т. д., для переноса строковых литералов и требуют определения типов, например:

typedef std::basic_string<PAN_CHAR_T> string_t;

правильно составить. Я думаю, что это уродливо, и предпочел бы не использовать эти typedefs.

Вот пример: http://www.pantheios.org/doc/html/cpp_2misc_2example_8cpp_8misc_8strings_2example_8cpp_8misc_8strings_8cpp-example.html

Я попытался скомпилировать Pantheios с отключенным PANTHEIOS_USE_WIDE_STRINGS, но получил много ошибок сборки — есть идеи?


person Mike Hornblade    schedule 20.06.2011    source источник
comment
Какой был вопрос? Как построить с поддержкой широких символов или без нее? С каким именно сообщением об ошибке вы столкнулись?   -  person Sergei Nikulov    schedule 21.06.2011
comment
Я в основном спрашиваю, сумасшедший ли я - все ли используют эту библиотеку только с широкими строками? Я пошел дальше с поддержкой широких строк, но это болезненно, если вы записываете их в файлы, поскольку каждый символ занимает два байта. поэтому wordpad показывает сообщения журнала, такие как:   -  person Mike Hornblade    schedule 21.06.2011
comment
..\..\src\util\time.cpp(299): ошибка C2440: 'инициализация': невозможно преобразовать из 'int (__stdcall *)(LCID,DWORD,const SYSTEMTIME *,const stlsoft::winstl_project: :ws_char_a_t *,stlsoft::winstl_project::ws_char_a_t *,int)' to 'int (__stdcall *)(LCID,DWORD,const SYSTEMTIME *,LPCTSTR,LPTSTR,int)'   -  person Mike Hornblade    schedule 21.06.2011
comment
^^^^ это пример ошибки, когда я отключаю поддержку широких символов и делаю полную сборку.   -  person Mike Hornblade    schedule 21.06.2011
comment
Я не использую широкие струны. Ваш пример из блокнота нормальный для представления многобайтовых символов. Используйте любой редактор, поддерживающий Unicode, чтобы увидеть его так, как вы ожидали. И я не помню, чтобы для его отключения требовалось что-то определить. Просто измените свое решение VS, чтобы использовать многобайтовую кодировку символов для char вместо широкострочной кодировки символов по умолчанию wchar_t. Он должен быть где-то в обозревателе решений->Свойства->Общие->C/C++.   -  person Sergei Nikulov    schedule 21.06.2011
comment
Или просто не используйте цели Unicode.   -  person Sergei Nikulov    schedule 21.06.2011
comment
К вашему сведению: параметр «Набор символов» находится в «Свойствах конфигурации» -> «Общие». Выберите «Использовать многобайтовый набор символов», если вам не нужно/не хотите использовать широкие строковые средства.   -  person dcw    schedule 21.06.2011


Ответы (1)


Как вы заметили, серверная часть файла предполагает многобайтовый вывод в многобайтовой сборке и широкий вывод в широкой сборке по умолчанию, но во IIRC есть параметры инициализации (для be.file), которые позволяют вам заставить его так или иначе, независимо от того, как вы строите.

fwiw, я думаю, что примеры должны учитывать все перестановки, и поэтому «уродство», о котором вы сообщаете, существует. Если вы создаете только одну кодировку символов или другую, вам не нужно этого делать. Очень похоже на примеры кода Windows, в которых используется TCHAR и все функции _tcsXXX(): вам не нужно этого делать, если вы не хотите, чтобы ваш код работал с обоими.

ХТН

person dcw    schedule 21.06.2011