Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2009, 08:56   #1
alukanin
 
Регистрация: 22.05.2009
Сообщений: 5
По умолчанию Проблемы с WriteConsole

Пишу в консоль с помощью WriteConsoleA.
Даю ей handle, который вернул GetStdHandle(STD_OUTPUT_HANDLE).
WriteConsoleA(или WriteConsole, не важно) пишет в stdout без проблем, но после её вызова GetLastError возвращает 12.

Залез в msdn, нашел, что причина 12 - это 'Access Code Invalid'.
Более детальной инфы по поводу этой ошибки не нашел.
Я предположил, что нету прав на запись в stdout, но в этом случае строка в него не попала бы, к тому же msdn говорит, что GetStdHandle всегда возвращает handle со всеми правами.

Кто то нибудь в курсе, в чем дело?
alukanin вне форума Ответить с цитированием
Старый 22.05.2009, 09:01   #2
radiohobbyt
Пользователь
 
Регистрация: 28.03.2009
Сообщений: 38
По умолчанию

это...читай внимательно хелп.

Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError

итого. если все сработало(" пишет в stdout без проблем") зачем вызываешь GetLastError?
radiohobbyt вне форума Ответить с цитированием
Старый 22.05.2009, 09:05   #3
alukanin
 
Регистрация: 22.05.2009
Сообщений: 5
По умолчанию

Дело в том, что она возвращает ноль, но в тоже время всё пишет.
alukanin вне форума Ответить с цитированием
Старый 22.05.2009, 14:17   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если всё пишет, тогда в чём проблема?
rpy3uH вне форума Ответить с цитированием
Старый 22.05.2009, 18:49   #5
alukanin
 
Регистрация: 22.05.2009
Сообщений: 5
По умолчанию

Проблема в том, что когда возникает ошибка это не нормально.
Это по вашему нормально, так это оставлять?

Я не хочу писать абы как.

Последний раз редактировалось alukanin; 22.05.2009 в 18:58.
alukanin вне форума Ответить с цитированием
Старый 23.05.2009, 05:36   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от alukanin Посмотреть сообщение
Проблема в том, что когда возникает ошибка это не нормально.
Это по вашему нормально, так это оставлять?

Я не хочу писать абы как.
Цитата:
Functions executed by the calling thread set this value by calling the SetLastError function. You should call the GetLastError function immediately when a function's return value indicates that such a call will return useful data. That is because some functions call SetLastError with a zero when they succeed, wiping out the error code set by the most recently failed function.
вот и вся проблема.
вы просто вызываете её тогда когда не нужно
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.05.2009, 05:54   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
вы просто вызываете её тогда когда не нужно
Если я правильно понял , то в коде
Код:
   invoke WriteConsole,...
   test eax,eax
   jz error
   ...
error:
   invoke GetLastError
всегда получается error, но в тоже время строка записывается. Если не здесь, то где еще ее вызывать?
Я предлагаю взглянуть на сам код.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 23.05.2009 в 06:30.
Goodwin98 вне форума Ответить с цитированием
Старый 27.05.2009, 15:49   #8
alukanin
 
Регистрация: 22.05.2009
Сообщений: 5
По умолчанию

Вообщем я разобрался.
Я сам виноват. Райтконсоль хочет пойнтер на двойное слово, куда он пишет сколько символов он отправил в поток.
А я ему NULL давал.

Последний раз редактировалось alukanin; 27.05.2009 в 15:52.
alukanin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с FindWindowEx Slonnn Помощь студентам 22 08.03.2012 22:32
Проблемы с FindNext Serejka Общие вопросы Delphi 3 16.03.2009 15:23
Проблемы с кодировкой LAGOX PHP 7 14.02.2009 15:13
проблемы с IE xakzona Помощь студентам 1 16.12.2008 21:53