2014-11-24 2 views
5

cURL версия/OS, о которой идет речь, составляет 7.15 и Red Hat 5, они установлены на камне, хотя и не могут их изменить.libcURL Функция выполнения, не называемая

Реальная функция прогресс, который не вызывается вообще кодом

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

Во время установки:

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) 

Где CurlUtil является класс, что код существует в CURLOPT_DEBUGFUNCTION работает отлично и есть. таким же образом устанавливается в одной и той же функции.

+1

Действительно ли вы на 100% уверены, что данные фактически передаются? Он также не может быть вызван, если передача выполняется слишком быстро. Становится ли 'progressCallback' статическим? –

+2

Если 'progressCallback()' не объявлен как 'static', это должно быть. Вы не можете использовать метод нестатического класса в качестве обратного вызова (если вы не обернете его в thunk). –

+0

... и если комментарии Remy или Collin действительны, вопрос неверен ... –

ответ

1

проблема связана с вызовом функции обратного вызова. Для gcc-компиляторов ему требуется опция __cdecl или/Gd. Проверьте параметры компилятора, если функция уже статична. Функции-члены C++ вызываются с помощью вызовов вызова thiscall. Посмотрите на следующую ссылку, он обеспечивает более чистый путь, если вы хотите иметь класс, который отвечает за обработку статуса передачи и статистики: How can I use a member function pointer in libcurl

PS: Мой редактировать медленнее, как я сердилась верификация. Отсюда сообщение в качестве ответа.

Смежные вопросы