Это вызывается, когда существует файл класса, от которого зависит Ваш код, и это присутствует во время компиляции, но не найдено во времени выполнения. Ищите различия в свое время изготовления и пути к классам во время выполнения.
Win32 предоставляет функции Internet *
.
http://msdn.microsoft.com/en-us/library/aa385473 (VS.85) .aspx
Вам необходимо выполнить (IIRC, я не касался этих API-интерфейсов более 10 лет) InternetOpenURL
и InternetReadFile
.
Я думаю libcurl соответствует этим требованиям. И еще кое-что.
В этом примере показано, как получить страницу HTTP, сохранив ее только в памяти. Это немного больше кода, чем в вашем примере, но он на C.
POCO также имеет кроссплатформенные сетевые компоненты.
В примерах программа FTP представлена примерно в таком виде (без проверки ошибок)
Poco::Net::FTPStreamFactory::registerFactory();
std::ofstream localFile(inputFile, std::ios_base::out | std::ios_base::binary);
Poco::URI uri(inputURL);
std::auto_ptr<std::istream> ptrFtpStream(Poco::Net::URIStreamOpener::defaultOpener().open(uri));
Poco::StreamCopier::copyStream(*ptrFtpStream.get(), localFile);
Вы не ищете неправильные места. Это просто печальная реальность. Вот почему существует оболочка C ++ для libcurl под названием curlpp .
Ниже приведен пример того, как получить веб-страницу и распечатать ее в потоке stdout.
#include <curlpp/curlpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>
using namespace curlpp::options;
int main(int, char **)
{
try
{
// That's all that is needed to do cleanup of used resources (RAII style).
curlpp::Cleanup myCleanup;
// Our request to be sent.
curlpp::Easy myRequest;
// Set the URL.
myRequest.setOpt<Url>("http://example.com");
// Send request and get a result.
// By default the result goes to standard output.
myRequest.perform();
}
catch(curlpp::RuntimeError & e)
{
std::cout << e.what() << std::endl;
}
catch(curlpp::LogicError & e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
Помимо libcurl / curlpp (который является гибким и мощным, но я считаю его очень ... неуклюжим), есть две библиотеки C ++, за которыми я слежу. Оба они довольно новые и основаны на Boost :: ASIO. Однако ни один не поддерживает прокси (насколько я могу судить).
cpp-netlib ( blog ), возможно, более зрелый (я знаю, что он прошел некоторое тестирование в реальном мире ), но на данный момент не хватает таймаутов (я над этим работаю!). Пример:
network::http::request request("http://google.com");
network::http::client client;
network::http::response response;
response = client.get(request);
if (response.status() == 200)
{
std::cout << body(response));
}
Urdl ( документация ) написан создателем ASIO и имеет таймауты (но было объявлено только в прошлом месяце ). Он использует другую модель, предпочитая работать с потоками:
urdl::istream is("http://google.com");
std::string line;
while (std::getline(is, line))
{
std::cout << line << std::endl;
}
Я согласен с тем, что C ++ не имеет большой поддержки HTTP, но обе эти библиотеки многообещающи.