我在使用curl_easy_escape
C++ 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++ 动态链接库
Visual C++ > Win32 > Win32 Project
Application type = DLL (所有其他选项默认)
Linker > Input > Additional Dependencies, 添加 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_test
使用char 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 *'?
更新
理想情况下我想使用curl_easy_escape/curl_easy_unescape
,但作为一种解决方法,我决定在 C 中实现我自己的 URL 编码/解码。我在http://www.geekhideout.com/urlcode.shtml找到了高效、编写良好的编码/解码函数