나는 이것을 몇 시간 동안 연구 해왔다. 나는 C++에 매우 익숙하며 지금까지 발견 한 모든 해결책을 이해하지 못합니다.Visual C++ Forms 응용 프로그램 오류 : C3374
는내가 내 양식 응용 프로그램에서 cURL을 파일 다운로드를 만들기 위해 노력하고있어,하지만 난이 망할 오류 얻을 :
Error 50 error C3374: can't take address of 'EmperorAntiVirusInstaller::FileDownloader::write_data' unless creating delegate instance c:\users\bailey\documents\visual studio 2010\projects\emperor antivirus installer\emperor antivirus installer\FileDownloader.h 97
코드는 다음과 같습니다 :
private:
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
System::Void beginDownload(void) {
CURL *curl;
FILE *fp;
CURLcode res;
char *url = "http://localhost/aaa.txt";
char outfilename[FILENAME_MAX] = "C:\\bbb.txt";
curl = curl_easy_init();
if(curl) {
fp = fopen(outfilename,"wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &FileDownloader::write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
fclose(fp);
}
}
또한 양식의 이름은 FileDownloader입니다.
erroring 라인이다 : 나는 멋지게이 문제를 해결하는 방법에 대한 & 간단한 대답을 설명 찾을 찾고 있어요
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &FileDownloader::write_data);
. :/
'write_data' 메소드를 정적 멤버로 만드는 것으로 충분합니까? – harper
@ 하퍼 : 정상적인 C++에서는 가능합니다. C++/CLI에서 나는 덜 확신합니다. –