Considering speed, would this be the fastest way?Good idea
But it would be faster, if it doesn't use BinaryMid/StringLeft when it is not needed:
Plain Text... Select Case @error Or Not $a_iCall[0] Return SetError(1) Case Not $a_iCall[4] Return SetError(0) Case $a_iCall[4] < $iNumberOfBytesToRead Switch $iMode Case 0 Return SetError(0, $a_iCall[4], StringLeft(DllStructGetData($lpBuffer, 1), $a_iCall[4])) Case 1 Return SetError(0, $a_iCall[4], BinaryToString(BinaryMid(DllStructGetData($lpBuffer, 1), 1, $a_iCall[4]), 4)) Case 2 Return SetError(0, $a_iCall[4], BinaryMid(DllStructGetData($lpBuffer, 1), 1, $a_iCall[4])) EndSwitch EndSelect Switch $iMode Case 0,2 Return SetError(0, $a_iCall[4], DllStructGetData($lpBuffer, 1), $a_iCall[4]) Case 1 Return SetError(0, $a_iCall[4], BinaryToString(DllStructGetData($lpBuffer, 1), 4)) EndSwitch
Func _WinHttpReadData($hRequest, $iMode = 0, $iNumberOfBytesToRead = 8192) Local $lpBuffer Switch $iMode Case 1, 2 $lpBuffer = DllStructCreate("byte[" & $iNumberOfBytesToRead & "]") Case Else $iMode = 0 $lpBuffer = DllStructCreate("char[" & $iNumberOfBytesToRead & "]") EndSwitch Local $a_iCall = DllCall("Winhttp.dll", "int", "WinHttpReadData", _ "hwnd", $hRequest, _ "ptr", DllStructGetPtr($lpBuffer), _ "ulong", $iNumberOfBytesToRead, _ "dword*", 0) If @error Or Not $a_iCall[0] Then SetError(1, 0, "") EndIf Switch ($a_iCall[4] < $iNumberOfBytesToRead) & $iMode Case 0,2 Return SetError(0, $a_iCall[4], DllStructGetData($lpBuffer, 1)) Case 1 Return SetError(0, $a_iCall[4], BinaryToString(DllStructGetData($lpBuffer, 1), 4)) Case 10 Return SetError(0, $a_iCall[4], StringLeft(DllStructGetData($lpBuffer, 1), $a_iCall[4])) Case 11 Return SetError(0, $a_iCall[4], BinaryToString(BinaryMid(DllStructGetData($lpBuffer, 1), 1, $a_iCall[4]), 4)) Case 12 Return SetError(0, $a_iCall[4], BinaryMid(DllStructGetData($lpBuffer, 1), 1, $a_iCall[4])) EndSwitch EndFunc






