C++ 未调用libcURL进程函数

C++ 未调用libcURL进程函数,c++,libcurl,C++,Libcurl,所讨论的cURL版本/操作系统是7.15和Red Hat 5,它们是一成不变的,所以无法更改它们 根本没有被调用的实际进度函数 int CurlUtil::progressCallback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) { DEFN_METHOD_NAME( "progressCallback" ); EX_EN

所讨论的cURL版本/操作系统是7.15和Red Hat 5,它们是一成不变的,所以无法更改它们

根本没有被调用的实际进度函数

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

其中CurlUtil是代码所在的类。CURLOPT_调试函数工作正常,并以相同的方式在完全相同的函数中设置。

问题在于回调函数的调用约定。它需要为gcc编译器提供cdecl或/Gd选项。如果函数已经是静态的,请检查编译器选项。C++成员函数调用这个调用约定。 看看下面的链接,如果您想拥有负责处理传输状态和统计信息的类,它提供了更简洁的方法:


PS:我的编辑速度较慢,因为我正在交叉验证。因此,作为答案发布。

您是否100%确定数据确实正在传输?如果传输速度过快,也可能不会调用它。
progressCallback
是静态的吗?如果
progressCallback()
未声明为
static
,则需要声明。不能将非静态类方法用作回调(除非将其包装为thunk)。。。。如果Remy或Collin的评论有效,那么问题就错了……数据正在传输,函数被声明为静态。我已经尝试了public和private两种功能,但都没有被调用。请查看以下链接:
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)