Ich habe versucht, einen C ++ 11-Lambda-Ausdruck mit CURLOPT_WRITEFUNCTION zu verwenden, aber das Programm stürzt zur Laufzeit mit einer Zugriffsverletzung ab. Ich bin mir nicht sicher, wie ich dies aufgrund des Mangels an C ++ 11-Kenntnissen weiter untersuchen sollte, aber vielleicht hat jemand anderes eine Idee, wie man das funktioniert.
Die Funktion:
%Vor%Der Fehler:
Unbehandelte Ausnahme bei 0x000000cc in lpip_dl.exe: 0xC0000005: Zugriffsverletzung bei Position 0x00000000000000cc.
(Zugriffsverletzung bei Position 0x00000000000000cc)
Erscheint, wenn curl den Rückruf verwenden möchte:
%Vor%libcurl ist eine einfache C-Bibliothek, Sie müssen einen Rückruf festlegen, der von einem solchen aufgerufen werden kann. Das bedeutet, dass lustige C ++ - Dinge zuerst "cifiziert" werden müssen, um zu funktionieren. Wie in einen alten Funktionszeiger.
Dies wird auch im libcurl-FAQ-Eintrag " Nicht-statische C ++ - Funktionen für Rückrufe verwenden? behandelt "
Siehe auch: Callbacks im C-Stil in C ++ 11
Sie können das tatsächlich tun, indem Sie die Lambda-Funktion auf den Funktionszeiger anwenden. Sie können zuerst einen Typedef machen, um die Umwandlung zu vereinfachen.
%Vor%Dann verwendest du static_cast.
%Vor%Hinweis: Um in den C-Funktionszeiger zu konvertieren, können Sie nur leere Captures [] verwenden.