在微软中输出 visual studio
output in microsoft visual studio
我正在制作一个使用 libcurl 显示 php 页面输出的应用程序
在终端模式下,此应用运行良好
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);
}
但现在我想制作一个图形用户界面应用程序。
对于 GUI,我使用 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);
}
}
谁能告诉我如何将第一个代码的输出存储在变量、标签或文本框中?
您需要告诉 libcurl 如何处理它从远程服务器接收到的输出。
这里有两个选项可以使用:
- CURLOPT_WRITEFUNCTION:这告诉libcurl在接收数据时调用哪个函数。
- CURLOPT_WRITEDATA:这是一个
void*
,将被传递给写函数。
默认情况下,这些设置为 fwrite
和 stdout
,这就是 libcurl 将输出写入终端的原因。 (注意:选项被命名为 'write' 因为一个常见的操作是下载文件并 将其写入 到磁盘。将其视为收到后如何处理数据它,不要认为它是来自服务器的 'reading'。)
如果您想捕获数据,我会这样做:
- 分配某种容器:有一个字节缓冲区,并将 CURLOPT_WRITEDATA 设置为指向该缓冲区的指针。
- 创建一个将数据复制到缓冲区的方法,并将其设置为CURLOPT_WRITEFUNCTION。
因为 libcurl 是一个非托管库,所以我会使用 std::vector<uint8_t>
作为缓冲区。写入回调 必须 具有原型 size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
,我认为处理非托管向量比固定托管缓冲区并正确处理它更容易。
我正在制作一个使用 libcurl 显示 php 页面输出的应用程序 在终端模式下,此应用运行良好
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);
}
但现在我想制作一个图形用户界面应用程序。
对于 GUI,我使用 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);
}
}
谁能告诉我如何将第一个代码的输出存储在变量、标签或文本框中?
您需要告诉 libcurl 如何处理它从远程服务器接收到的输出。
这里有两个选项可以使用:
- CURLOPT_WRITEFUNCTION:这告诉libcurl在接收数据时调用哪个函数。
- CURLOPT_WRITEDATA:这是一个
void*
,将被传递给写函数。
默认情况下,这些设置为 fwrite
和 stdout
,这就是 libcurl 将输出写入终端的原因。 (注意:选项被命名为 'write' 因为一个常见的操作是下载文件并 将其写入 到磁盘。将其视为收到后如何处理数据它,不要认为它是来自服务器的 'reading'。)
如果您想捕获数据,我会这样做:
- 分配某种容器:有一个字节缓冲区,并将 CURLOPT_WRITEDATA 设置为指向该缓冲区的指针。
- 创建一个将数据复制到缓冲区的方法,并将其设置为CURLOPT_WRITEFUNCTION。
因为 libcurl 是一个非托管库,所以我会使用 std::vector<uint8_t>
作为缓冲区。写入回调 必须 具有原型 size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
,我认为处理非托管向量比固定托管缓冲区并正确处理它更容易。