Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > неправильный размер PRINTDLG


Автор: 040375 24.4.2008, 15:16
Простейший код - примерно такой:
Код

    #pragma pack(push)
    #pragma pack(1)
                DOCINFO di;
    PRINTDLG pd;
#pragma pack(pop)
                ...
    ZeroMemory(&pd,sizeof(pd));
    ZeroMemory(&di,sizeof(DOCINFO));
                ...
    pd.lStructSize = sizeof(pd);
    pd.Flags = PD_RETURNDC;

    PrintDlg(&pd);

Проблема в том - что вызов PrintDlg(&pd) не показывает диалог принтера, а возвращает
CDERR_STRUCTSIZE. sizeof(pd) = 68.  Подсчитал "руками" размер - 66.
Подставил pd.lStructSize = 66 - всё заработало. Где грабли? Дело точно не в выравнивании на мой взгляд

Автор: dumb 24.4.2008, 18:45
sizeof(PRINTDLG)? хотя у меня, как ни крути - 66.

Автор: 040375 24.4.2008, 20:11
sizeof(PRINTDLG)=68 - тоже самое. Я вспоминаю, что подобное бывало у меня на Intel P4 - то работает правильно - то нет - не успел тогда посмотреть в чём причина, а сейчас двхуголовый AMD - почему то неправильно считает всегда. И ещё - линковщик "ругается", что не может слинковать статично объявленные STL объекты типа map, vector e.t.c. в глобальной области видимости (файл), а на P4 такого не было. Неужели это аппаратная проблемка?

Автор: dumb 25.4.2008, 00:42
от процессора такие вещи зависеть не могут. проверь на чистом проекте - в FormCreate сделай ShowMessage(sizeof(PRINTDLG));

Автор: 040375 25.4.2008, 04:21
Так я сразу так и сделал - тот код сверху - это и есть тестовый проект - на котором проверял. Что в реальном, что в этом проекте - одинаково неправильно работает. Вообще это странно очень - я уж не знаю - на что грешить. Я сталкивался раньше с разными глюками от борланда - но с такими .... smile Попробую под студио тоже самое

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)