С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 10.03.2020
Сообщений: 56
MASM

Инициализировать структуру указателями на строки

14.03.2020, 22:09. Показов 1871. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, у меня задача - достать дескриптор принтера и отправить ему на печать файл .bmp. Дескриптор у меня получить удается, но согласно документации функции StartDocPrinterA - мне нужно сначала поместить название печатаемого файла в структуру DOC_INFO_1 - как это можно сделать? (на обычный mov masm ругается)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.386
.model flat,stdcall
 
include ..\INCLUDE\kernel32.inc 
include ..\INCLUDE\user32.inc 
include ..\INCLUDE\masm32rt.inc
include ..\INCLUDE\avicap32.inc
include ..\INCLUDE\comdlg32.inc
include ..\INCLUDE\winspool.inc
 
includelib ..\LIB\kernel32.lib 
includelib ..\LIB\user32.lib
includelib ..\LIB\avicap32.lib
includelib ..\LIB\vfw32.lib
includelib ..\LIB\comdlg32.lib
includelib ..\LIB\winspool.lib
 
 
DOC_INFO_1 STRUCT
    pDocName    DWORD ?
    pOutputFile     DWORD ?
    pDatatype   DWORD ?
DOC_INFO_1 ENDS
.const
 
.data
buf db 128 dup(?)
file1  db "AAAA",0
PrintdlgA PRINTDLGA <>
DocinfoA DOCINFOA <>
docInfo DOC_INFO_1 <>
 
printerName db "HP Ink Tank Wireless 410 series",0
fileType db "BMP",0
hPrinter db ?
.code
start:
 
mov docInfo.pOutputFile, NULL
;invoke GetDefaultPrinterA, ADDR printerName, ADDR buf
invoke OpenPrinterA, ADDR printerName, ADDR buf, NULL
;AddPrinter
invoke StartDocPrinter, ADDR buf, 1, ADDR docInfo
 
invoke ExitProcess,0
 
end start
Кстати, на строчку
Assembler
1
invoke OpenPrinterA, ADDR printerName, ADDR buf, NULL
тоже ругается "invalid handler error" - что ему не нравится, если там дескриптор и передается?
Спасибо большое всем, кто примет участие в обсуждении
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2020, 22:09
Ответы с готовыми решениями:

Как создать структуру, где будут поля с указателями на эту же структуру?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct DoubleQueue { queue* ar; queue* al; int data; }...

Как инициализировать структуру
имеется структура point {int x; int y;} вопрос таков как мне не создавая переменной передать структуру в функцию т.е. struct point...

Как инициализировать указатель на структуру?
Помогите розобратся, если можно с краткими примерами... __ как инициализировать указатель на структуру? __как инициализировать поле...

1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,893
Записей в блоге: 12
14.03.2020, 22:40
Смотрите, как в общем виде решаются подобные вопросы.
Поиск StartDocPrinter
https://docs.microsoft.com/en-... docprinter
показывает, что
C
1
2
3
4
5
DWORD StartDocPrinter(
  _In_ HANDLE hPrinter,
  _In_ DWORD  Level,
  _In_ LPBYTE pDocInfo
);
в функцию передаётся три параметра - два числа (типов HANDLE и DWORD) и один указатель (тип LPBYTE).

Т.е. у вас в программе корректное обращение к этой функции.

Далее, смотрим DOC_INFO_1
https://docs.microsoft.com/en-... doc-info-1
C
1
2
3
4
5
typedef struct _DOC_INFO_1 {
  LPTSTR pDocName;
  LPTSTR pOutputFile;
  LPTSTR pDatatype;
} DOC_INFO_1;
и видим, что переменная этого типа содержит три указателя (т.е. адреса) на строки с завершающим нулём (тип LPTSTR).

Инициализировать структуру на этапе компиляции можно приметно так - ЭТО ПРОСТО ПРИМЕР
Assembler
1
docInfo DOC_INFO_1 <file1, fileType, printerName>
Кроме того - у вас сильно много включений - они как-то конфликтуют. Замените начало на
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.model flat,stdcall
option casemap :none
 
        include \masm32\include\windows.inc
 
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\masm32.inc
        include \masm32\include\winspool.inc
 
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\masm32.lib
        includelib \masm32\lib\winspool.lib
Добавлено через 4 минуты
В windows.inc описано множество типов из MSDN, в том числе и DOC_INFO_1 - поэтому отпадает необходимость описывать эту структуру самостоятельно.
Можете удалить собственное описание.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.03.2020, 22:40
Помогаю со студенческими работами здесь

Инициализировать структуру в двусвязном списке
Я только начал разбираться в одно/двусвязных списках, могли бы вы объяснить как инициализировать структуру с помощью двусвязного списка....

Незадача с указателями на структуру
Всем привет, у меня проблема с одним заданием. Значит звучит оно так. Надо создать массив на 10, потом сделать так, что бы каждый элемент...

Как инициализировать и использовать безымянную структуру?
Здравствуйте. У меня возник вопрос.. В заголовочном файле (*.h) объявляется безымянная структура. typedef struct { unsignet char...

Не могу создать структуру с указателями
Добрый день, Хочу создать структуру в которой память на поля выделяется динамически. Я знаю, что создав динамический массив, можно...

Как передать в функцию строку и инициализировать ею структуру?
#include &lt;iostream&gt; using namespace std; struct bar { char name; double ves; int kollors; }; void funk(bar&amp; konf, char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru