Re[4]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: Вумудщзук Беларусь  
Дата: 28.02.06 09:23
Оценка: 1 (1) +1
>_Вообще_ некорректно проверять значение, возвращаемое GetLastError() после вызова ShowWindow. Оно просто не имеет значения.

>Насчет некорректного hwnd — смотри IsWindow

Насчёт IsWindow в первоисточнике написано, что

A thread should not use IsWindow for a window that it did not create because the window could be destroyed after this function was called. Further, because window handles are recycled the handle could even point to a different window.


Судя по первоначальному посту hwnd чужой, поэтому на IsWindow полагаться нельзя.
Homo sum et nihil humani a me alienum puto...
Re[3]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: ekamaloff Великобритания  
Дата: 28.02.06 08:54
Оценка: +1
Здравствуйте, pavel2005, Вы писали:

P>Верно. Просто я пишу оболочку WinAPI под свои нужды, и мне необходимо ловить некоторые ошибки, например, если ShowWindow передали некорректный hwnd. Вот почему я вызываю GetLastError. Придется просто игнорировать ошибку 183 после ShowWindow.


_Вообще_ некорректно проверять значение, возвращаемое GetLastError() после вызова ShowWindow. Оно просто не имеет значения.

Насчет некорректного hwnd — смотри IsWindow
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[4]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: ekamaloff Великобритания  
Дата: 28.02.06 09:41
Оценка: +1
Здравствуйте, wellwell, Вы писали:

W>Или так:

W>SetLastError(0);
W>YourApiFunctionCall;
W>GetLastError — если не 0, то что-то не получилось.

Непонятно что это дает. YourApiFunctionCall может вызвать еще пятьдесят функций OtherApiFunctionCall и одна из них установит last error. Причем это не обязательно будет обозначать, что вызов YourApiFunctionCall прошел неудачно.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
ShowWindow выдает ERROR_ALREADY_EXISTS
От: pavel2005  
Дата: 28.02.06 08:26
Оценка:
Please, HELP!

Вызываю ShowWindow для чужого окна с разными параметрами SW_RESTORE, SW_MINIMIZE, SW_MAXIMIZE и др. Действие выполняется корректно ВСЕГДА, но в некоторых случаях (точно не понимаю, при каких условиях) GetLastError() после вызова ShowWindow возвращает ERROR_ALREADY_EXISTS (183), хотя требуемое действие было выполнено на ура.

Что за чертовщина? На что ругается WinAPI???
Re: ShowWindow выдает ERROR_ALREADY_EXISTS
От: ekamaloff Великобритания  
Дата: 28.02.06 08:34
Оценка:
Здравствуйте, pavel2005, Вы писали:

P>Вызываю ShowWindow для чужого окна с разными параметрами SW_RESTORE, SW_MINIMIZE, SW_MAXIMIZE и др. Действие выполняется корректно ВСЕГДА, но в некоторых случаях (точно не понимаю, при каких условиях) GetLastError() после вызова ShowWindow возвращает ERROR_ALREADY_EXISTS (183), хотя требуемое действие было выполнено на ура.


P>Что за чертовщина? На что ругается WinAPI???


Кто вам сказал что ShowWindow устанавливает last error? Судя по документации, она его не трогает. Следовательно там может быть что угодно, оставшееся после выполнения какой-лиюо другой фукнкции (вызванной например той же ShowWindow) в этом же потоке.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: pavel2005  
Дата: 28.02.06 08:51
Оценка:
Здравствуйте, ekamaloff, Вы писали:

E>Кто вам сказал что ShowWindow устанавливает last error? Судя по документации, она его не трогает. Следовательно там может быть что угодно, оставшееся после выполнения какой-лиюо другой фукнкции (вызванной например той же ShowWindow) в этом же потоке.


Верно. Просто я пишу оболочку WinAPI под свои нужды, и мне необходимо ловить некоторые ошибки, например, если ShowWindow передали некорректный hwnd. Вот почему я вызываю GetLastError. Придется просто игнорировать ошибку 183 после ShowWindow.

Или есть идея получше?
Спасибо!
Re[3]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: wellwell Австралия https://www.softperfect.com
Дата: 28.02.06 09:30
Оценка:
"pavel2005" <51808@users.rsdn.ru> wrote in message news:1703658@news.rsdn.ru...
> Верно. Просто я пишу оболочку WinAPI под свои нужды, и мне необходимо ловить некоторые ошибки, например, если ShowWindow передали некорректный hwnd. Вот почему я вызываю GetLastError. Придется просто игнорировать ошибку 183 после ShowWindow.

Или так:
SetLastError(0);
YourApiFunctionCall;
GetLastError — если не 0, то что-то не получилось.
Posted via RSDN NNTP Server 2.0
Re[5]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: wellwell Австралия https://www.softperfect.com
Дата: 28.02.06 10:57
Оценка:
"ekamaloff" <48275@users.rsdn.ru> wrote in message news:1703859@news.rsdn.ru...
> Непонятно что это дает. YourApiFunctionCall может вызвать еще пятьдесят функций OtherApiFunctionCall и одна из них установит last error. Причем это не обязательно будет обозначать, что вызов YourApiFunctionCall прошел неудачно.

А они что, еще и внутри себя last error меняют? Вот это для меня новость, честно говоря. То есть, предположим мы вызвали API GetUserName, которая (опять же предположим) внутри себя вызвала HeapAlloc, а после того как он обломался — GlobalAlloc который был успешен. Значит ли это, что GetUserName вернет True и одновременно изменит GetLastError?
Posted via RSDN NNTP Server 2.0
Re[6]: ShowWindow выдает ERROR_ALREADY_EXISTS
От: ekamaloff Великобритания  
Дата: 28.02.06 11:03
Оценка:
Здравствуйте, wellwell, Вы писали:

W>А они что, еще и внутри себя last error меняют? Вот это для меня новость, честно говоря.


А почему бы и нет? Что собственно говоря может помешать им это сделать?

A>То есть, предположим мы вызвали API GetUserName, которая (опять же предположим) внутри себя вызвала HeapAlloc, а после того как он обломался — GlobalAlloc который был успешен. Значит ли это, что GetUserName вернет True и одновременно изменит GetLastError?


Именно. Пример как раз в тему. GetUserName не говорит нам, что после ее вызова last error будет установлен, а значит проверять его мы не можем.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.