我正在使用 libcurl,我在类中下载文件,我想查看其中的进度函数。我注意到我可以通过设置一个典型的函数指针
curl_easy_setopt(mCurl, CURLOPT_PROGRESSFUNCTION, progress_func3);
但是,我想将其设置为指向我的类的函数指针。我可以得到要编译的代码
curl_easy_setopt(mCurl, CURLOPT_PROGRESSFUNCTION, &MyClass::progress_func3);
and the progress_func3
函数将被调用。问题是,一旦返回就会出现“检测到缓冲区溢出!”错误通过,表示程序无法安全地继续和执行,必须终止。 (这是一个 Microsoft Visual C++ 运行时库错误窗口,我使用的是 Visual Studio 2010)。
当我使用函数时,没有问题,但是当我使用成员函数指针时,就会出现这个错误。如何在 libcurl 中使用成员函数指针?
非静态成员函数需要一个this
可调用的指针。你不能提供那个this
具有此类接口的指针,因此不可能使用非静态成员函数。
您应该创建一个“纯 C”函数作为回调,并让该函数在适当的位置调用成员函数MyClass
实例。
尝试类似的方法:
int my_progress_func(void *clientp, ...)
{
MyClass *mc = static_cast<MyClass*>(clientp);
mc->your_function(...);
return 0; // or something else
}
Then:
curl_easy_setopt(mCurl, CURLOPT_PROGRESSDATA, &your_myclass_object);
curl_easy_setopt(mCurl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
(显然,您负责此处的类型匹配。如果您附加除MyClass
指向进度数据的指针,你得靠自己了。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)