| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Передача указателя на структуру в API |
| Автор: BpIstorick 25.7.2006, 07:27 | ||
| Столкнулся с проблемой, что не знаю как передать указатель (Pointer) на структуру в API функция Ситуация: Есть функция
в которую передается указатель на структуру pPrinter, ради получания информации о принтере! Проблема: не могу инициализировать Цель: научите меня эти структуры инициализировать, хочу понять, чтоб не только эту функцию мог выполнить, но и с другими все получилось, лучше сами но если пошлете на книгу или статью, то всирано спасиб! |
| Автор: BUGOR 25.7.2006, 08:25 | ||
Сами структуры PRINTER_INFO без особого труда найдёшь в C:\Program Files\Borland\Delphi6\Source\Rtl\Win\WinSpool.pas Надеюсь из этого описания всё понятно? Это не указатель на структуру, это указатель на байтовый массив, который будет хранить в себе структуру, вообщем читай описания, там всё подробно описано. |
| Автор: BpIstorick 25.7.2006, 10:32 | ||
| BUGOR, Я знаю на какую структуру мне нужно передать указатель, я не знаю как правильно это сделать все эти функции я успешно нашел в MSDN, собственно оттуда я и взял описание функции GetPrinter для своего вопроса
то есть указатель на буффер "a PRINTER_INFO_* structure", то есть буффер болжен быть просто массивом байт нужного размера (допустим buffer: array [0..Size] of byte), а потом мы передаем этот буфер соответствующей структуре или buffer должен быть сразу типа PPrinterInfo2? в DRKB есть пример как добавить принтер с помощью API функции AddPrinter, НО мы сами создаем в этом примере и заполняем структуру А МНЕ НУЖНО ПОЛУЧИТЬ структуру из GetPrinter p.s. повторю что мне интересен подход и методика, чтобы в будущем не спрашивать по каждой функции разъяснений ;) |
| Автор: Alexeis 25.7.2006, 10:59 | ||
что-то вроде этого.
Так в P мы получим и результат, который уже будет иметь размер NewStrSize Добавлено @ 11:00 Т.е. это уже будет другая структура с другими данными. |
| Автор: BpIstorick 25.7.2006, 13:38 |
| т.е. нам нужно как бы инициализировать каждое поле записи типа TPrinterInfo1 (или любой другой нужной). попробую А если Тип состоит из 30 и до бесконечности количества полей, то нужно будет каждое инициализировать отдельно??? |
| Автор: BpIstorick 25.7.2006, 14:16 | ||
| Нашел ответ опять же в DRKB, статья называется "Как изменить порт для принтера?" (хотя там подобного материала как оказалось навалом, просто или не попадалось на глаза, или не обращал внимание) код, написанный мной для проверки работает и выглядит следующим образом
как оказалось все просто и непросто (если не знаешь как делать 1. первым вызовом получаем необходимое количесвто байт по структуру pInfo 2. выделяем необходимое количество байт 3. получаем саму структуру |