Jump to content

Libcurl.dll Trouble with WRITEFUNCTION


Irulk
 Share

Recommended Posts

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 :

; #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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...