Irulk Posted July 13, 2017 Share Posted July 13, 2017 Hello, I'm trying to use the easy interface of libcurl.dll. In thirst, i'm doing that - Link to comment Share on other sites More sharing options...
Irulk Posted July 13, 2017 Author Share Posted July 13, 2017 Bad keyword, i'm writing the post, wait ... Link to comment Share on other sites More sharing options...
Irulk Posted July 13, 2017 Author Share Posted July 13, 2017 Re-Hello, I'm trying to use the easy interface of libcurl.dll. In first, I call curl_easy_init i call curl_easy_setopt for the url i call curl_easy_perform i call curl_easy_cleanup It gave me the source code, but in the output. I don't want that. So after research, i found the setopt CURLOPT_WRITEFUNCTON. So i have write this : expandcollapse popup; #GLOBALES# ==================================================================================================================== Global Const $hDll = DllOpen(@ScriptDir & "\libcurl.dll") Global Const $CURLOPT_URL = 10002 Global Const $CURLOPT_WRITEFUNCTION = 20011 Global Const $CURLOPT_VERBOSE = 41 Global Const $CURLOPT_NOPROGESS = 43 Global Const $sUrl = "http://www.google.com" Global $response_data = "" ; =============================================================================================================================== ConsoleWrite("[DEBUG] DllOpen : " & $hDll & @CRLF) Local $aHandleEasy = DllCall($hDll, "ptr:cdecl", "curl_easy_init") ConsoleWrite("[DEBUG] curl_easy_init : " & @error & @CRLF) Local $tCURLSTRUCT_URL = DllStructCreate("char[" & StringLen($sUrl) + 1 & "]") DllStructSetData($tCURLSTRUCT_URL, 1, $sUrl) Local $aRes = DllCall($hDll, "int:cdecl", "curl_easy_setopt", "ptr", $aHandleEasy[0], "int", $CURLOPT_URL, "long", DllStructGetPtr($tCURLSTRUCT_URL)) ConsoleWrite("[DEBUG] curl_easy_setopt : " & $aRes[0] & " " & @error & @CRLF) $Write_Data = DllCallbackRegister("_Write_Data", "uint", "ptr;uint;uint;ptr") ConsoleWrite("[DEBUG] Pointer of DllCallback WriteFonction : " & DllCallbackGetPtr($Write_Data) & @CRLF) Local $aRes = DllCall($hDll, "int:cdecl", "curl_easy_setopt", "ptr", $aHandleEasy[0], "int", $CURLOPT_WRITEFUNCTION, "ptr", DllCallbackGetPtr($Write_Data)) ConsoleWrite("[DEBUG] curl_easy_setopt : " & $aRes[0] & " " & @error & @CRLF) Local $aRes = DllCall($hDll, "int:cdecl", "curl_easy_perform", "ptr", $aHandleEasy[0]) ConsoleWrite("[DEBUG] curl_easy_perform : " & $aRes[0] & " " & @error & @CRLF) DllCall($hDll, "none:cdecl", "curl_easy_cleanup", "ptr", $aHandleEasy[0]) If @error Then ConsoleWrite("[DEBUG] Failed curl_easy_cleanup" & @CRLF) DllCallbackFree($Write_Data) DllClose($hDll) Func _Write_Data($ptr,$nSize,$nMemb,$pStream) ConsoleWrite("11" & @CRLF) Return $nSize*$nMemb EndFunc Giving a ptr of a calback for the CURLOPT_WRITEFUNCTION. Yes, there is nothing in my callback function, but this is not a problem. I think. When i exec that, it give me this output : [DEBUG] DllOpen : 1 [DEBUG] curl_easy_init : 0 [DEBUG] curl_easy_setopt : 0 0 [DEBUG] Pointer of DllCallback WriteFonction : 0x006D0000 [DEBUG] curl_easy_setopt : 0 0 11 My DllOpen don't return -1, it's fine, all of my opt return 0, it's fine. I see my callback, it's the 11. But the script block in the curl_easy_perform. I don't know why ... I'm doing something wrong, but what ? And why ? After ~30s curl_easy_perform crash, my script crash and don't display the line : ConsoleWrite("[DEBUG] curl_easy_perform : " & $aRes[0] & " " & @error & @CRLF) Thanks for your help. ps: My script require : libcurl.dll libssl-1_1.dll libcrypto-1_1.dll Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now