Привет всем !
Clarion 6.3 9058
Вот потребовалось выдать код возврата (DOS ErrorLevel) из программы, сделанной на Clarion.
Ничего лучше, чем HALT(CodError) - не нашел, но его рекомендуют использовать только для отладки,
да и полное прерывание работы программы в точке возврата кода не есть очень хорошо ...
Есть ли идеи как еще можно вернуть код возврата ? Или записать его куда-нибудь через API ...
Заранее спасибо !
Выдать код возврата из программы ....
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7680
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 26 раз
- Поблагодарили: 68 раз
Re: Выдать код возврата из программы ....
Привет всем!
Игорь не утверждаю, что код написан мной, но интернете вот что нашел. Поскольку подобная задача и ранее у меня возникала.
Вопрос: Подскажите, как узнать, завершился ли процесс, запущеный по ShellExecute?
Ответ 1: Ниже работающая функция, которая реализует требуемую задачу.
Игорь не утверждаю, что код написан мной, но интернете вот что нашел. Поскольку подобная задача и ранее у меня возникала.
Вопрос: Подскажите, как узнать, завершился ли процесс, запущеный по ShellExecute?
Ответ 1: Ниже работающая функция, которая реализует требуемую задачу.
Код: Выделить всё
RunJob FUNCTION(*CSTRING ProgramName,*CSTRING Param)
PROC::ID STRING('RunJob')
SW_HIDE EQUATE(0)
WE WinError
RetVal ULONG
ExitCode ULONG
INFINITE EQUATE(0FFFFFFFFh)
WAIT_FAILED EQUATE(0FFFFFFFFh)
STARTF_USESHOWWINDOW EQUATE(00000001h)
SI GROUP(STARTUPINFO).
PI GROUP(PROCESS_INFORMATION).
ProgPar CSTRING(SIZE(FIL:ProgramName) + SIZE(FIL:Parameters))
CODE
WE.Init()
ProgPar = ProgramName & ' ' & Param
! memset(ADDRESS(SI),0,SIZE(SI))
SI.StructSize = SIZE(SI)
SI.Flags = STARTF_USESHOWWINDOW
SI.ShowWindow = SW_HIDE
Loging( PROC::ID & ' Starting Job ' & ProgPar)
UNLOCKTHREAD()
IF CreateProcess(0,ADDRESS(ProgPar),0,0,FALSE,0,0,0,ADDRESS(SI),ADDRESS(PI))
IF WaitForSingleObject(PI.hProcess,INFINITE)
RetVal = WE.GetError()
ELSE
Loging( PROC::ID & ' Job ' & ProgramName & ' ended successful')
IF ~GetExitCodeProcess(PI.hProcess, ADDRESS(ExitCode))
RetVal = WE.GetError()
Loging( PROC::ID & ' Error posted during ' & ProgramName)
END
END
ELSE
RetVal = WE.GetError()
Loging( PROC::ID & ' Error posted during ' & ProgramName)
END
LOCKTHREAD()
WE.Kill()