更新:問題不在libcurl中。取消請求的正確方法是如果從回調非零值返回。我使用了curl_progress_callback函數,並且一切正常。libCurl。同時取消請求
0
A
回答
0
你需要了解的是CURL是一個C庫。一般來說,你不能傳遞指向C++對象或函數的指針,因爲C不知道關於C++類和調用約定的任何信息。
例如,這條線是不正確的:
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
CURL SETOPT CURLOPT_ERRORBUFFER
預計,第三個參數是一個指向具有用於CURL_ERROR_SIZE
字符空間C風格串(C-風格char
數組)。而是將指針傳遞給std::string
對象。由於用C語言編寫的CURL不知道std::string
是什麼,它只是用錯誤數據覆蓋具有sizeof (std::string)
字節的字節表示,因爲它認爲指針是C風格的char
數組。
使用這個代替:
char errorBuffer[CURL_ERROR_SIZE + 1]; errorBuffer[CURL_ERROR_SIZE] = '\0';
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
errorBuffer
只充滿如果curl_easy_perform()
返回錯誤代碼有效的字符串。
此外,Uploader::WriteResponce
是一個C++函數。使用此行:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteResponce);
CURL期望第三個參數是指向C函數。在這裏,你正在傳遞一個指向C++的函數。您需要調用換到WriteResponce
在extern "C"
函數調用C++函數:
extern "C" size_t call_uploader_writeresponce(char *ptr, size_t size, size_t nmemb, void *user_data) {
return Uploader::WriteResponce(ptr, size, nmemb, static_cast<std::string *>(user_data));
}
// ...
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &call_uploader_writeresponce);
「寫功能」需要返回size_t
,不int
; Uploader::WriteResponce
需要返回size_t
。
相關問題
- 1. 示例如何取消libcurl的請求
- 2. 」請求被中止:請求被取消。「同時處理PayPal IPN
- 3. libcurl以json格式獲取請求
- 4. 並行libcurl HTTP請求
- 5. C++ LibCurl發送HTTPS請求
- 6. 如何取消同步WinHttp請求?
- 7. 取消URL請求
- 8. ASIHTTPRequest請求取消
- 9. 取消ASIHTTP請求
- 10. 取消getUserMedia請求
- 11. 取消XHR請求
- 12. AFHTTPRequestOperation取消請求
- 13. 取消FB.api(...)請求
- 14. 取消HTTP請求
- 15. 當新請求來自同一用戶時,如何取消先前的請求
- 16. 請求被中止:請求被取消
- 17. 鉻:GET請求取消CORS HTTPS請求
- 18. Tomcat請求通過超時取消
- 19. Windows何時取消機上WDF請求?
- 20. 取消libcurl簡單句柄
- 21. 改裝取消請求
- 22. 取消重複請求NSURLConnection
- 23. 在Tomcat中取消請求
- 24. 自動取消jqgrid請求
- 25. $ http.jsonp請求是gettings取消
- 26. Three20:取消網絡請求
- 27. 鉻取消角2請求
- 28. 凌空取消請求
- 29. iOS Swift - NSURLConnection.sendAsynchronousRequest取消請求
- 30. 電子webview取消請求
所示的代碼很好。問題在別處。顯示所有的代碼。 –
@ n.m。但是當我編寫ProgressShow時總是返回0,一切正常無誤! – Alecs
如果您擁有的是觸發器的圖片,則無法使用槍診斷問題。 –