Поиск:

Ответ в темуСоздание новой темы Создание опроса
> неправильный размер PRINTDLG, sizeof и PRINTDLG 
:(
    Опции темы
040375
Дата 24.4.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 6.4.2006

Репутация: нет
Всего: 2



Простейший код - примерно такой:
Код

    #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 - всё заработало. Где грабли? Дело точно не в выравнивании на мой взгляд
PM MAIL   Вверх
dumb
Дата 24.4.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



sizeof(PRINTDLG)? хотя у меня, как ни крути - 66.
PM MAIL   Вверх
040375
Дата 24.4.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 6.4.2006

Репутация: нет
Всего: 2



sizeof(PRINTDLG)=68 - тоже самое. Я вспоминаю, что подобное бывало у меня на Intel P4 - то работает правильно - то нет - не успел тогда посмотреть в чём причина, а сейчас двхуголовый AMD - почему то неправильно считает всегда. И ещё - линковщик "ругается", что не может слинковать статично объявленные STL объекты типа map, vector e.t.c. в глобальной области видимости (файл), а на P4 такого не было. Неужели это аппаратная проблемка?
PM MAIL   Вверх
dumb
Дата 25.4.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



от процессора такие вещи зависеть не могут. проверь на чистом проекте - в FormCreate сделай ShowMessage(sizeof(PRINTDLG));
PM MAIL   Вверх
040375
Дата 25.4.2008, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 6.4.2006

Репутация: нет
Всего: 2



Так я сразу так и сделал - тот код сверху - это и есть тестовый проект - на котором проверял. Что в реальном, что в этом проекте - одинаково неправильно работает. Вообще это странно очень - я уж не знаю - на что грешить. Я сталкивался раньше с разными глюками от борланда - но с такими .... smile Попробую под студио тоже самое
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0940 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.