因为开发cad需要请求服务器的数据,再次之前我在服务器搭设了webapi用户传递数据,所以安装了libcurl在objectarx中使用数据。
 Open VS2012 x64 Native Tools Command Prompt补充地址:
我在此将相关的引用配置图片,cad里面的应用和常规的一致。
 

 
 
所有的使用与现在的案例一致,但是我这里发生了一个错误,我在此记录一下,在下面这段代码当中,我运行程序,cad报错内存泄漏,定位问题之后发现问题出错在这句
CURLcode res = curl_easy_perform(curl);
我查看了很多文章都无法解决,后来发现其实是此处的数据传递错误,我的指针传递错误导致的问题,
 这里是问题代码片段
inline BOOL webApi::DownloadFile(const char* Filepath)
{
    // ...
    curl_easy_setopt(curl, CURLOPT_URL, combinePath.c_str());
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &webApi::curlWriteFunction);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
    CURLcode result = curl_easy_perform(curl);
    fclose(fp);
    curl_easy_cleanup(curl);
    curl_global_cleanup();
    return TRUE;
}
可以看到在这句代码中我传入了一个指针
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &webApi::curlWriteFunction);
问题出现这里是因为此处需要调用的是回调函数指针,但是我的代码中使用的是实例函数指针,导致传值错误,从而引发了后面的问题。
 此处修改为:
webapi.h
static size_t downloadCallback(void *buffer, size_t sz, size_t nmemb, void *writer);
webapi.cpp
size_t webApi::downloadCallback(void* buffer, size_t sz, size_t nmemb, void* writer)
{
	std::string* psResponse = (std::string*)writer;
	size_t size = sz * nmemb;
	psResponse->append((char*)buffer, size);
	return sz * nmemb;
}
之后修改原来的代码段:
std::string strTmpStr;
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, downloadCallback); 
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strTmpStr);
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
std::string strRsp;
问题解决。
















![JSON.toJSONString/JSONObject.toJSONString将实体类对象转换成JSON字符串时,多出了params字符串[记录贴]](https://img-blog.csdnimg.cn/e4a3802a8cb9465bb8b6bc2973c1587b.png)


