Space писал(а):ёпс, ShellExecute не дожидается выполнения rar.exe, а просто запускает. Чё делать?
Хакер писал(а):Ещё раз, специально для тебя, суть претензии: почему никто сразу же не сказал автору, что используя ShellExecute он задуманного никогда не сделает?
Когда он указал ShellExecute() в качестве первого параметра GetExitCodeProcess, почему в этот раз никто не сказал, что это чушь, а вместо того, стали говорить о WaitForSingleObject?
Space писал(а):у, нашёл ошибку. Так Shell и ShellExecute возвращают разные значения?
If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
Dim hProcess As Long, ReturnCode As Long
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or SYNCHRONIZE, 0, Shell("D:\Program Files\WinRAR\rar.exe a D:\temp @file.lst"))
WaitForSingleObject hProcess, -1
Debug.Assert GetExitCodeProcess(hProcess, ReturnCode)
CloseHandle hProcess
MsgBox ReturnCode, , "Код возврата"
из IDE никак
Space писал(а):почему это просто число?If the function succeeds, the return value is the instance handle of the application that was run, or the handle of a dynamic data exchange (DDE) server application.
Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.
1. Почему Shell возвращает Double?
2. Почему OpenProcess спокойно принимает Double где указано Long?
3. Почему Rar не может сработать нормально, в конце-то концов!
С чего ты вообще взял что она возвращает Double???
Потому что в VB типы автоматически приводятся к тому, к чему нужно, если это возможно
Space писал(а):если Shell вернёт нечто 10^20
Space писал(а):VB кричит
Public Function A() As Double
End Function
Public Sub B(ByVal x As Long)
End Sub
Public Sub Main()
B A
End Sub
Private Sub Form_Load()
Dim b As Double
A b
End Sub
Private Sub A(x As Long)
End Sub
Space писал(а):
- Код: Выделить всё
Private Sub Form_Load()
Dim b As Double
A b
End Sub
Private Sub A(x As Long)
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38