gpt4 book ai didi

c# - Visual Studio C++ 类库中的回调

转载 作者:行者123 更新时间:2023-11-28 06:16:03 26 4
gpt4 key购买 nike

我需要从 C# 调用 native C++。 C++ 库中的一种方法需要读取网页内容 - 我决定通过 cURL 库来完成。我创建了一个 Visual C++ -> CLR -> 类库 项目,现在我的库如下所示:

#pragma once    
#include <stdio.h>
#include <string>
#include <curl/curl.h>

using namespace System;

namespace HtmlCppParser {

public ref class HtmlCppParser
{
public:
String^ GetContent(String^ url){
CURL *curl;
CURLcode res;
String^ content;

curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, this->write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);

return content;
}
}

private:
size_t write_data(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
};
}

当我编译这个时,我得到C3867 错误:

错误 C3867:HtmlCppParser::HtmlCppParser::write_data:函数调用缺少参数列表;使用“&HtmlCppParser::HtmlCppParser::write_data”...

我的错误在哪里?

最佳答案

我认为最简单的解决方案是使 write_data 成为“经典”C 函数(将其移出 HtmlCppParser 类)并替换 this->write_data by &write_data,因为您似乎通过 userp 指针接收了所需的一切。

并且您应该注意通过 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content); 提供 System::String 但将其转换为 std::stringwrite_data 中。您也应该在 GetContent 中使用 std::string 或者可能将两者替换为 System::Text::StringBuilder .

关于c# - Visual Studio C++ 类库中的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com