powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / GetLastError возвращает 87
25 сообщений из 25, страница 1 из 1
GetLastError возвращает 87
    #36418151
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж. Не буду рассказывать предысторию, дошел до следующего:
Создаю новый проект, на форме один статик текст, в Declare global external function пишу

Код: plaintext
FUNCTION ulong GetLastError() LIBRARY "kernel32.dll"

В событии open окна пишу

Код: plaintext
1.
2.
Long l_error
l_error = GetLastError()
st_1.text = string(l_error)

Это всё. При запуске вижу 87, вместо желанного нуля.

87 -- Invalid parameter (Неверно задан параметр), хотя функция какбэ даже без параметров.. Может кто в курсе как это побороть?

P.S. если это дело повесить на кнопку вместо open, то 87 только при первом нажатии, при последующих прекрасный ноль.
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418195
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85 пишет:

> 87 -- Invalid parameter (Неверно задан параметр), хотя функция какбэ
> даже без параметров.. Может кто в курсе как это побороть?

Легко. Не вызывать функцию там, где это не имеет смысла.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418237
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Легко. Не вызывать функцию там, где это не имеет смысла.
Вы имеете в виду что перед ней должны быть другие winapi функции?

В любом случае, что бы там не происходило перед GetLastError, сначала вылазит 87, а потом то что должно быть на самом деле.
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418281
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще-то возвращается ulong, а не long
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418295
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001Ну вообще-то возвращается ulong, а не longИсправил, ничего не изменилось(
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418374
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85spas2001Ну вообще-то возвращается ulong, а не longИсправил, ничего не изменилось(
Сказали же, не вызываь ее просто так. Эта ошибка лезет откуда-то из недр виртуальной машины от ее вызовов Win API функций. С точки зрения Windows не различимо что вызвали что-то из скрипта или из внутреннего кода виртуальной машины. Например если в отладчике проходиться, то в PB9 все время выскакивало сообщение типа Window doesn't have scrollbars от прорисовки отладчика, а GetLastError из скрипта терялся.
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418419
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Сказали же, не вызываь ее просто так. Эта ошибка лезет откуда-то из недр виртуальной машины от ее вызовов Win API функций. С точки зрения Windows не различимо что вызвали что-то из скрипта или из внутреннего кода виртуальной машины.Ну я же вызывал ее не из научного интереса первоначально..

Вешаю на кнопку соединение с фтп сервером и получение файла, естественно хочу знать соединилось или нет, скопировалось или нет, для этого использую GetLastError. При первом нажатии при любом исходе возвращает 87 (и если успешно файл скопирует и если неправильный путь прописать и хоть еще что).

P.S. даже не так, не при первом нажатии, а при первом вызове GetLastError, последующие нормальный результат дают.
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418425
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85 пишет:

> Вы имеете в виду что перед ней должны быть другие winapi функции?

Функции, устанавливающие этот самый LastError. Это неочевидно ;)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418488
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85[quot Локшин Марк]
Вешаю на кнопку соединение с фтп сервером и получение файла, естественно хочу знать соединилось или нет, скопировалось или нет, для этого использую GetLastError. При первом нажатии при любом исходе возвращает 87 (и если успешно файл скопирует и если неправильный путь прописать и хоть еще что).

Вызывайте WinAPI функцию и сразуже следом за ней GetLastError СРАЗУ СЛЕДУЮЩЕЙ СТРОКОЙ В ТОМ ЖЕ СКРИПТЕ.
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418544
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Вызывайте WinAPI функцию и сразуже следом за ней GetLastError СРАЗУ СЛЕДУЮЩЕЙ СТРОКОЙ В ТОМ ЖЕ СКРИПТЕ.Так и делал.. в первый раз 87, независимо от того что та функция должна была установить.

Я конечно могу обойти эту беду, вызвав GetLastError разок в open (тогда на кнопке потом все хорошо), но хотелось бы как-то понять (я ж думал это моя ошибка, а не пауэрбилдеровская)
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418560
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Функции, устанавливающие этот самый LastError. Это неочевидно ;)?
Очевидно. Но пока они были я мог сомневаться, а вдруг и правда неверные аргументы передаю.
А вот пока ошибки не случилось, этот самый LastError должен бы нулем быть по логике, не?
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418595
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85 пишет:

> Так и делал.. в первый раз 87, независимо от того что та функция должна
> была установить.

А та функция устанавливает LastError? И вообще, где код ;)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418599
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85Dim2000
Функции, устанавливающие этот самый LastError. Это неочевидно ;)?
Очевидно. Но пока они были я мог сомневаться, а вдруг и правда неверные аргументы передаю.
А вот пока ошибки не случилось, этот самый LastError должен бы нулем быть по логике, не?
Нет.
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418673
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
А та функция устанавливает LastError? И вообще, где код ;)?
Щас озаботился сделать короткий пример, чтоб показать, что я не вру и вроде догнал где собака порылась..

Код: plaintext
1.
FUNCTION ulong GetLastError() LIBRARY "kernel32.dll"
FUNCTION ulong FindWindowW(ulong classname,string windowname) LIBRARY "User32.dll"
Код: plaintext
1.
2.
3.
4.
5.
6.
ulong l_error, l_handle
string ls_wname

ls_wname = "qwerty"
l_handle = FindWindowW( 0 ,ls_wname)
l_error = GetLastError()
st_1.text = string(l_error)
Вот такой код на кнопке ведет себя как раз как я описал: при первом нажатии 87, при последующих 0
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418698
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем поиск окна?
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418750
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85 пишет:

> Вот такой код на кнопке ведет себя как раз как я описал: при первом
> нажатии 87, при последующих 0

Как я и думал, не воспроизводится.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36418780
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Как я и думал, не воспроизводится.
что, сразу 0 дает?
значит у меня что-то(
PB 11.5 build 3127 кстати
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36419130
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85Щас озаботился сделать короткий пример, чтоб показать, что я не вру и вроде догнал где собака порылась..

Код: plaintext
1.
FUNCTION ulong GetLastError() LIBRARY "kernel32.dll"
FUNCTION ulong FindWindowW(ulong classname,string windowname) LIBRARY "User32.dll"
Код: plaintext
1.
2.
3.
4.
5.
6.
ulong l_error, l_handle
string ls_wname

ls_wname = "qwerty"
l_handle = FindWindowW( 0 ,ls_wname)
l_error = GetLastError()
st_1.text = string(l_error)
Вот такой код на кнопке ведет себя как раз как я описал: при первом нажатии 87, при последующих 0
Вот смотрите, сценарий при котором LastError может портиться между вызовами FindWindowW и GetLastError:

PowerScript:
l_handle = FindWindowW(0,ls_wname)
Внутри:
Вызов LoadLibrary("User32.dll")
Вызов GetProcAddress("FindWindowW")
Вызов FindWindowW()

PowerScript:
l_error = GetLastError()
Внутри:
Вызов LoadLibrary("kernel32.dll")
Вызов GetProcAddress("GetLastError")
Вызов GetLastError()

Как видим при первом запуске вашего кода, между вызовами FindWindowW и GetLastError производятся еще ряд вызовов которые также устанавливают LastError
Это только те, что точно должны вызваться. А есть еще и работа самого интерпретатора PB, и не исключено что там вызываются еще дополнитеные ф-и WinAPI
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36419573
maniac85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Вот смотрите, сценарий при котором LastError может портиться между вызовами FindWindowW и GetLastError:

PowerScript:
l_handle = FindWindowW(0,ls_wname)
Внутри:
Вызов LoadLibrary("User32.dll")
Вызов GetProcAddress("FindWindowW")
Вызов FindWindowW()

PowerScript:
l_error = GetLastError()
Внутри:
Вызов LoadLibrary("kernel32.dll")
Вызов GetProcAddress("GetLastError")
Вызов GetLastError()

Как видим при первом запуске вашего кода, между вызовами FindWindowW и GetLastError производятся еще ряд вызовов которые также устанавливают LastError
Это только те, что точно должны вызваться. А есть еще и работа самого интерпретатора PB, и не исключено что там вызываются еще дополнитеные ф-и WinAPIВот кстати да, загвоздка где-то в подгрузке библиотек. Когда для примера пытался вместо FindWindow вызывать CopyFile (который тоже из kernel32), то GetLastError уже проходит нормально..

Хотя вон же люди пишут что не воспроизводится..
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36419584
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте вместо FindWindowW, FindWindowA
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36419590
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя это от системы зависит
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36419863
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001 пишет:

> Хотя это от системы зависит

Скорее от версии эхотага.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36420146
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maniac85Хотя вон же люди пишут что не воспроизводится..
Я может не совсем ясно выразился.
Суть моего сообщения в том, что GetLastError() бессмысленно вызывать из PowerScript - она вернет ошибку не от той ф-и которая вам нужна (даже если и значение будет похоже на правду).
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36420152
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Anatoly Moskovsky
Да это понятно, но все-равно прикольно наблюдать :)
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
GetLastError возвращает 87
    #36420157
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для FTP - я брал wodftpdlx Тынц
Все красиво и без лишних телодвижений
И сразу все проблемы решаются, различные z-mode и куча наворотов
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / GetLastError возвращает 87
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]