2015-11-13 6 views
0

я делаю приложение Wich показывает вывод страницы PHP с использованием Libcurl в терминальном режиме этого приложения отлично работаетвыхода в Microsoft Visual Studio

CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if (curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, "www.sglroostermail.nl/api/getChanges.php?y=1); 
     res = curl_easy_perform(curl); 

     /* always cleanup */ 
     curl_easy_cleanup(curl); 
    } 

, но теперь я хочу сделать графический интерфейс приложения. Для графического интерфейса я использую Microsoft Visual Studio 2015 -> пустой проект CLR.
, но код терминала дает свой собственный вывод , и я хочу показать вывод в текстовом поле или на этикетке.
, например: (это часть MYForm.h

#pragma endregion 
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { 
} 
private: System::Void textBox1_TextChanged_1(System::Object^ sender, System::EventArgs^ e) { 

} 
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
    String^klas = textBox1->Text; 
    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 
    if (curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, "www.sglroostermail.nl/api/getChanges.php?y=", klas); 
     res = curl_easy_perform(curl); 

     /* always cleanup */ 
     curl_easy_cleanup(curl); 
    } 
} 

может кто-нибудь сказать мне, как сохранить выход первого кода в переменной, метки или текстовое поле

+0

C++/CLI имеет свой собственный тег, и я изменил его использование и тег winforms. – crashmstr

+0

Вы можете сделать это нелегко или просто. Я рекомендую простой способ, вместо этого используйте WebClient :: DownloadString(). –

ответ

0

Вам нужно? сказать Libcurl, что делать с выходом он получает от удаленного сервера

Есть два варианта для использования здесь:.

  • CURLOPT_WRITEFUNCTION: Это говорит libcurl, который вызывается, когда он получает данные.
  • CURLOPT_WRITEDATA: Это void*, который будет передан функции записи.

По умолчанию они настроены на fwrite и stdout, поэтому Libcurl записывает вывод на терминал. (Примечание: параметры называются «write», потому что общая операция заключается в загрузке файла и напишите на диск. Подумайте об этом как о том, что делать с данными после его получения, не думайте об этом как « . читать»с сервера)

Если вы хотите, чтобы захватить данные, вот что я хотел бы сделать:

  • Выделяют контейнер какой-то: есть буфер байт, и установить CURLOPT_WRITEDATA к указателю этот буфер.
  • Создайте способ копирования данных в буфер и установите его как CURLOPT_WRITEFUNCTION.

Поскольку libcurl - неуправляемая библиотека, я бы использовал std::vector<uint8_t> в качестве буфера. Обратный вызов записи должен иметь прототип size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);, и я думаю, что с неуправляемым вектором легче справиться, чем привязать управляемый буфер &.

+0

спасибо за ответ, я только не знаю всего этого о буферах и т. Д., Не могли бы вы привести пример? – waterlight

Смежные вопросы