Отправка на печать Си C++

Рейтинг: 1Ответов: 1Опубликовано: 11.04.2015

Здравствуйте. Не могу вывести на печать обычный текст из нескольких символов. Использую вот эту функцию https://msdn.microsoft.com/en-us/library/windows/desktop/dd162959(v=vs.85).aspx

Вот сам код консольного приложения, который запускает функцию:

int _tmain(int argc, _TCHAR* argv[])
{
    LPTSTR printerName = (LPTSTR)_T("XP-58");
    CString str = "la-la-la";
    LPBYTE pByte = new BYTE[str.GetLength() + 1];
    memcpy(pByte, (VOID*)LPCTSTR(str), str.GetLength());
    DWORD count = 7;
    BOOL result = RawDataToPrinter(printerName, pByte, count);
    std::cout << result << std::endl;
    system("pause");
    return 0;
}

Имя принтера указано верно, он открывается, потому что в консоли после завершения работы написана цифра 1.

Проблема заключается в том, что документ добавляется в очередь на печать, и сразу удаляется оттуда, как будто уже распечатался, хотя принтер вообще ничего не напечатал.

Есть подозрения, что что-то с портом принтера, он подключен к USB002. Когда я отправляю на печать что-нибудь из блокнота, то в очереди на печать видно, что прописан порт USB002, но через мою программу задание в очереди на печать без порта.

Как задать принтеру порт, при открытии? Или, может быть, у меня в другом проблема?

Ответы

▲ 3

Долго думал над этим вопросом.

Непонятно, откуда вы берете значение printerName "XP-58". Скорее всего, такого принтера не находится, и задание просто отправляется в стандартный виртуальный принтер, который является аналогом /dev/null или печати в файл.

Скорее всего, это значение неверно, и нужно сначала вызвать EnumPrinters() и найти правильное имя для принтера/сервера печати.

P.S. Это просто теория, и далеко не факт что она сработает.