стингряное 26.09.07 22:34 // оригинал
Я уже разок писал о неприятном глюке CGXFont, который при сохранении в файл либо экспорте в LOGFONT умудрялся записать имя шрифта с длиной, превышающей LF_FACESIZE, что при чтении регулярно приводило к катастрофе. Тогда я это обошел принудительной записью нуля в lfFaceName[LF_FACESIZE-1], сегодня же в процессе ловли других глюков с шрифтами докопался до причины того поведения. Оказывается, эти умники в случае charset, отличного от default или ansi, просто лепят в конец имени шрифта строчку, соответствующую чарсету - " (Cyrillic)", " (Кириллический)" в русских виндах и т.п. Размер строки при этом, разумеется, не контролируется, в результате какой-нибудь "Microsoft Sans Serif (Кириллический)" и вылезает за допустимые границы. Самая же прелесть в том, что если сохранить имя шрифта в русских виндах, а потом считать в английских, есть все шансы огрести что-то типа "Microsoft Sans Serif (Кирилличе (Cyrillic)", что и приводило к очередным жестоким шрифтовым глюкам вплоть до вылета программы (у CGXFont раком вставали всякие внутренние хэши).