1

curl_easy_escapeC++ dll で関数を使用する際に問題が発生しています。コンソール アプリケーションを作成すると、curl_easy_escape期待どおりに動作します。

cURL curl-7.28.1-devel-mingw32
Visual Studio 2010

コンソール アプリケーション (期待どおりに動作)

int _tmain(int argc, _TCHAR* argv[])
{
    CURL *curl;
    char *data1;
    char *data2;
    int data2len;

    curl = curl_easy_init();
    if (curl)
    {
        data1 = curl_easy_escape(curl, "this is a string with spaces", 0);
        printf("\r\ndata1 = %s\r\n", data1);
        data2 = curl_easy_unescape(curl, data1, 0, &data2len);
        printf("\r\ndata2 = %s\r\n", data2);
        curl_easy_cleanup(curl);
    }
    printf(“\r\nPress any key to continue\r\n”);
    return 0;

出力

data1 = this%20is%20a%20string%20with%20spaces
data2 = this is a string with spaces
Press any key to continue

C++ DLL

Visual C++ > Win32 > Win32 プロジェクト
アプリケーション タイプ = DLL (他のすべてのオプションはデフォルト)
リンカ > 入力 > 追加の依存関係、libcurl.lib を追加

extern "C"
{
    __declspec(dllexport) int * curl_test(char *sBuf)
    {
        CURL *curl;
        curl = curl_easy_init();
        if (curl)
        {
            // The following line does not work
            //strcpy(sBuf, curl_easy_escape(curl, "this is a string with spaces", 0));

            // This line does work
            strcpy(sBuf, "this is a string with spaces");

            curl_easy_cleanup(curl);
        }
        return 0;

    }
}

dll は C プログラムで使用されcurl_testchar ptr[256]. そのcurl_easy_escape場で、LoadLibrary呼び出しは失敗します:

Error: C interpreter run time error: Error -- File error : LoadLibrary(mydll.dll) failed : The specified procedure could not be found.

これは にあるLoadLibraryため、curl_test関数はまだ呼び出されていないことに注意してください。

URL エンコード/デコード関数をいくつか見つけることができると思いますが、cURL が既に提供しているものを使用することをお勧めします。機能にも同じ問題がありcurl_easy_strerrorます。

「const char *」でしょうか?

アップデート

理想的には を使用したいのですが、回避策として、独自のURLcurl_easy_escape/curl_easy_unescapeエンコーディング/デコーディングを C で実装することにしました。

4

0 に答える 0