GetPrinter(hpr, 2, NULL, 0, &breq);
PRINTER_INFO_2 * pPrinterInfo = (PRINTER_INFO_2 *) new BYTE[breq];
GetPrinter(hpr, 2, (LPBYTE) pPrinterInfo, breq, &breq);
Опрос принтера
HANDLE hpr;
DWORD bufsize;
PRINTER_INFO_2 PrinterInfo;
bool fl = OpenPrinter("HP DeskJet 612C", &hpr, NULL);//нормально находит принтер.
bufsize = sizeof(PrinterInfo);//получается 84.
fl = GetPrinter(hpr, 2, (LPBYTE)&PrinterInfo, bufsize, &breq);//а вот здесь уже false.
DWORD error = GetLastError();//error = 122;
The data area passed to a system call is too small.(MSDN), типа места ему мало для формирования информации.
В brec значение 1308, если присвоить bufsize 1500, то всё нормально запишет, но, я так понимаю, после этого данные заносятся не в свою область и впоследствии имеем: Access violation reading location..
В чём тут дело? Может я в чём косячу непростительно.. Если делать динамически, то есть PrinterInfo объявлять как указатель на структуру PRINT_INFO_2, то получается не лучше.
Не подскажете в чём загвоздка?
Цитата:
Originally posted by Savoy
У меня запара со структурами для работы с принтером:
The data area passed to a system call is too small.(MSDN), типа места ему мало для формирования информации.
В brec значение 1308, если присвоить bufsize 1500, то всё нормально запишет, но, я так понимаю, после этого данные заносятся не в свою область и впоследствии имеем: Access violation reading location..
В чём тут дело? Может я в чём косячу непростительно.. Если делать динамически, то есть PrinterInfo объявлять как указатель на структуру PRINT_INFO_2, то получается не лучше.
Не подскажете в чём загвоздка?
У меня запара со структурами для работы с принтером:
The data area passed to a system call is too small.(MSDN), типа места ему мало для формирования информации.
В brec значение 1308, если присвоить bufsize 1500, то всё нормально запишет, но, я так понимаю, после этого данные заносятся не в свою область и впоследствии имеем: Access violation reading location..
В чём тут дело? Может я в чём косячу непростительно.. Если делать динамически, то есть PrinterInfo объявлять как указатель на структуру PRINT_INFO_2, то получается не лучше.
Не подскажете в чём загвоздка?
Ну а память ты не забыл выделить под буффер? Типа
Код:
Во, спасибо. Плохо представлял себе механизм работы этих функций, щас вроде получше - чё-то заработало. Память я выделял, но либо меньше, либо больше требуемого. Когда меньше сразу срубало, а когда больше работало не стабильно, да и при выходе из функции обработке кнопки всё равно вырубалось.