2014-11-24 20 views
5

Wersja cURL/OS, o którym mowa, to 7,15 i Red Hat 5, są one ustawione w kamieniu, więc nie można ich zmienić.Funkcja Progu libcURL nie jest wywoływana

Rzeczywista funkcja postęp, który nie jest w ogóle wywołany kod

int CurlUtil::progressCallback(void *clientp, double dltotal, double dlnow, 
          double ultotal, double ulnow) 
{ 
    DEFN_METHOD_NAME("progressCallback"); 
    EX_ENTRY_EXIT(); 

    EX_DEBUG("Total downloaded " << dlnow << "/" << dltotal); 
    EX_DEBUG("Total uploaded " << ulnow << "/" << ultotal); 

    CurlUtil* curlUtil = (CurlUtil*)clientp; 

    // If you return anything but 0, curl will abort transfer 
    return (true == curlUtil->killed()) ? 1 : 0; 
} 

Setup:

curl_easy_setopt(m_curl, CURLOPT_NOPROGRESS, 0); 
curl_easy_setopt(m_curl, CURLOPT_PROGRESSFUNCTION, CurlUtil::progressCallback); 
curl_easy_setopt(m_curl, CURLOPT_PROGRESSDATA, this) 

Gdzie CurlUtil ma klasę, że kod istnieje w CURLOPT_DEBUGFUNCTION działa dobrze i jest. ustawione w tej samej funkcji w ten sam sposób.

+1

Czy jesteś w 100% pewien, że dane są przesyłane? Nie można go również wywołać, jeśli transfer jest zbyt szybki. Czy "progressCallback" jest statyczne? –

+2

Jeśli 'progressCallback()' nie jest zadeklarowany jako 'static', musi być. Nie możesz użyć niestanowiącej metody klasy jako wywołania zwrotnego (chyba że zawiniesz ją w thunk). –

+0

... a jeśli komentarze Remy'ego lub Collin są poprawne, pytanie jest błędne ... –

Odpowiedz

1

Problem polega na wywołaniu konwencji funkcji oddzwaniania. Musi mieć opcję __cdecl lub/Gd dla kompilatorów gcc. Sprawdź opcje kompilatora, jeśli funkcja jest już statyczna. Funkcje składowe C++ są wywoływane z tymi konwencjami wywoływania. Spójrz na poniższy link, pod warunkiem, że bardziej przejrzysty sposób, jeśli chcesz mieć klasę, która jest odpowiedzialna za obsługę status transferu i statystyka: How can I use a member function pointer in libcurl

PS: Moja edycja była wolniejsza jak ja krzyż weryfikacyjny. Stąd publikacja jako odpowiedź.

Powiązane problemy