libcurl curl_easy_setopt long param未正确传递 - va_arg(param,long)

时间:2012-08-29 23:04:49

标签: c++ visual-studio-2010 visual-studio libcurl

任何可能对此有所了解的libcurl专家?

我注意到了这一点,因为我无法关闭libcurl VERBOSE:

curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);

当我通过调用libcurl进行追踪时,我发现0L(长)被转换为非零数字,导致VERBOSE始终打开。我还没有尝试,但我很确定任何长的参数都不会被正确传递。

data->set.verbose = (0 != va_arg(param, long))?TRUE:FALSE;

,其中

#define va_arg _crt_va_arg
#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

但我不确定这些是做什么的 为什么会发生这种情况以及如何解决这个问题?

我正在使用带有libcurl 7.27.0的Visual Studio 2010 C ++

1 个答案:

答案 0 :(得分:1)

va_arg()正在使用指针算术va_list param中提取0L。您可以在va_list类型herehere上阅读更多内容。 将您的0L转换为非零数字。

尝试在打开连接之前调用curl_easy_setopt()。文档说明您的详细设置是“设置为多次独立连接”(urldata.h ln 1537)。

如果您仍然不相信它有效,您可以将CURL *转换为 SessionHandle * 并在调试器中检查它,例如:

struct SessionHandle *data = reinterpret_cast<SessionHandle*>(curl);
// Inspect data->set.verbose

你会在urldata.h中找到SessionHandle的定义。