このコードを実装していますが、エラーが発生します。
http://curl.haxx.se/libcurl/c/ftpupload.html
エラーはこのコードにあります。
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
curl_off_t nread;
/* in real-world cases, this would probably get this data differently
as this fread() stuff is exactly what the library already would do
by default internally */
size_t retcode = fread(ptr, size, nmemb, stream);
nread = (curl_off_t)retcode;
fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
" bytes from file\n", nread);
return retcode;
}
エラーは...
IntelliSense: argument of type "void *" is incompatible with parameter of type "FILE *"
と
Error C2664: 'fread' : cannot convert parameter 4 from 'void *' to 'FILE *'
どんなヒントも役に立ちます。関数に void *stream を渡す理由がわかりません。それは一体何の意味ですか?ボイドへのポインタ?
ここで呼ばれます。
/* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
カール API
CURLOPT_READFUNCTION
次のプロトタイプに一致する関数へのポインターを渡します。 size_t function( void *ptr, size_t size, size_t nmemb, void *userdata); この関数は、ピアに送信するためにデータを読み取る必要があるとすぐに libcurl によって呼び出されます。ポインター ptr が指すデータ領域は、最大で nmemb バイト数を掛けたサイズで満たすことができます。関数は、そのメモリ領域に格納した実際のバイト数を返す必要があります。0 を返すと、ファイルの終わりがライブラリに通知され、現在の転送が停止されます。
「途中で」0 を返して現在の転送を停止すると (つまり、N バイトをアップロードすると言ったのに N バイト未満をアップロードした場合のように、サーバーがそれを予期する前に)、サーバーが「ハングする」という現象が発生する可能性があります。 「来ない残りのデータを待っています。
読み取りコールバックは CURL_READFUNC_ABORT を返して現在の操作を即座に停止し、転送から CURLE_ABORTED_BY_CALLBACK エラー コードが発生する場合があります (7.12.1 で追加)。
7.18.0 以降、この関数は CURL_READFUNC_PAUSE を返すことができ、これによりこの接続からの読み取りが一時停止されます。詳細については、curl_easy_pause(3) を参照してください。
バグ: TFTP アップロードを行う場合、コールバックが必要とする正確な量のデータを返す必要があります。そうしないと、サーバー側で最終パケットと見なされ、そこで転送が終了します。
このコールバック ポインタを NULL に設定するか、まったく設定しない場合、デフォルトの内部読み取り関数が使用されます。CURLOPT_READDATA で設定された FILE * userdata に対して fread() を実行しています。
私は私の深さから少し外れています。