Кажется, что вы можете сделать это более сложным, чем нужно.Я не знаю, как выглядит ваш WebRequest, поскольку вы не включили его в свой пример, но это простой пример добавления данных в std::string
.
Стоит отметить, что memcpy(&mem_ptr, &ptr, realsize);
неверен.У вас уже есть указатели, вам не нужно передавать их адреса, но если ваша конечная цель - поместить данные в std::string
, вы должны сделать это напрямую, как показано ниже.
#include <string>
#include <iostream>
#include <curl/curl.h>
#pragma comment(lib, "Crypt32.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Wldap32.lib")
size_t read_callback(char *buffer, size_t size, size_t nitems, void *userdata)
{
size_t dataSize = size * nitems;
std::cout << "Receiving " << dataSize << " bytes.\n";
if (dataSize)
{
std::string& str = *(std::string*)userdata;
str.append(buffer, dataSize);
}
return dataSize;
}
int main()
{
curl_global_init(CURL_GLOBAL_WIN32);
CURL* curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, read_callback);
std::string rawData;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &rawData);
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com");
//To try and make sure our callback is called more than once.
curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 1024);
curl_easy_perform(curl);
std::cout << rawData;
curl_easy_cleanup(curl);
curl_global_cleanup();
return 0;
}