C++ 在windows上使用libcurl,在我的c++;使用visual studio的项目无法工作,因为字符串已损坏
正如标题中所解释的,我正在尝试使用libcurlcapi提交简单的http查询C++ 在windows上使用libcurl,在我的c++;使用visual studio的项目无法工作,因为字符串已损坏,c++,visual-studio-2008,curl,libcurl,C++,Visual Studio 2008,Curl,Libcurl,正如标题中所解释的,我正在尝试使用libcurlcapi提交简单的http查询 我使用Windows作为操作系统,C++作为语言,Visual Studio 2008作为IDE。< /P> 我的代码非常简单: 我想: curlcodeinit=curl\u global\u init(curl\u global\u ALL) 我初始化我的句柄: CURL*handle=CURL\u easy\u init() 我设置url: CRULcode set\u url=curl\u easy\u se
我使用Windows作为操作系统,C++作为语言,Visual Studio 2008作为IDE。< /P> 我的代码非常简单:
我想:curlcodeinit=curl\u global\u init(curl\u global\u ALL)代码>
我初始化我的句柄:
CURL*handle=CURL\u easy\u init()代码>
我设置url:
CRULcode set\u url=curl\u easy\u setopt(句柄,CURLOPT\u url,“http://www.example.com“”
我提交我的请求:CURLcode submit=curl\u easy\u perform(handle)代码>
因此,init
和set\u url
返回代码为0(CURLE\u OK
),子imt返回代码为2(CURLE\u url\u格式错误
)
当我调试时,我意识到我的URL被破坏了,它非但没有被破坏,反而变成了:xj:
处于发布模式,而0 |:
处于调试模式。
我一进入curl\u easy\u setopt
URL字符串肯定已损坏
我的设置中一定有一个错误,因此下面是我的设置摘要(在调试模式下)
- 在共享DLL中使用MFC
- 使用多字节字符集
- 预处理器包括CURL\u STATICLIB
- 多线程调试DLL/MDd
- 链接againgst libcurld.lib(版本7.21.3)使用vc6curl.dsw项目编译
- 还将链接到againgst ws2_32.lib wldap32.lib
“使用vc6curl.dsw项目编译链接到t libcurld.lib(7.21.3版)。”
这就是问题所在
静态库必须使用相同的编译器和相同的运行库(/MDd)构建
您可以使用libcurl的DLL版本来避免这种情况。“使用vc6curl.dsw项目链接againgst libcurld.lib(7.21.3版)编译”
这就是问题所在
静态库必须使用相同的编译器和相同的运行库(/MDd)构建
使用DLL版本的libcurl可以避免这种情况。谢谢您的帮助。我写的简单代码很管用。不过,我还有两个问题。第一个问题是,如果我在有效的URL上调用curl\u easy\u getinfo
,我仍然会得到和以前一样的垃圾。此外,当我尝试执行更复杂的操作(设置URL并从其他地方执行查询)时,设置URL时会出现错误。在debug中,它在dbgheap.c中崩溃,而在release中,它只是崩溃,抱怨堆损坏。@junes如果将libcurld.lib(debug)与release build链接,或者反之亦然,则可能会发生这些问题。静态库链接有点棘手。如前所述,您必须匹配编译器/编译器版本/编译选项/运行时库版本/运行时库类型。但现在我使用的是dll,在我的链接器输入中,我使用libcurl_imp.lib和libcurld_imp.lib(在调试中)。我发现在windows和visual studio上使用libcurl非常困难…@jules First,curl\u easy\u getinfo
只有在建立连接并开始传输后才能使用。libcurl在执行之前不会复制输入url,所以在此处设置url调用在那里执行可能会导致内存引用错误。您可以使用静态变量创建一个静态变量来保存url字符串和setinfo url。好的,我明白了。问题是我的URL存储在堆栈中,在执行查询之前超出了范围。在执行查询之前必须存储URL,这有点麻烦。谢谢你的帮助。我写的简单代码很管用。不过,我还有两个问题。第一个问题是,如果我在有效的URL上调用curl\u easy\u getinfo
,我仍然会得到和以前一样的垃圾。此外,当我尝试执行更复杂的操作(设置URL并从其他地方执行查询)时,设置URL时会出现错误。在debug中,它在dbgheap.c中崩溃,而在release中,它只是崩溃,抱怨堆损坏。@junes如果将libcurld.lib(debug)与release build链接,或者反之亦然,则可能会发生这些问题。静态库链接有点棘手。如前所述,您必须匹配编译器/编译器版本/编译选项/运行时库版本/运行时库类型。但现在我使用的是dll,在我的链接器输入中,我使用libcurl_imp.lib和libcurld_imp.lib(在调试中)。我发现在windows和visual studio上使用libcurl非常困难…@jules First,curl\u easy\u getinfo
只有在建立连接并开始传输后才能使用。libcurl在执行之前不会复制输入url,所以在此处设置url调用在那里执行可能会导致内存引用错误。您可以使用静态变量创建一个静态变量来保存url字符串和setinfo url。好的,我明白了。问题是我的URL存储在堆栈中,在执行查询之前超出了范围。在执行查询之前必须存储URL,这有点麻烦。谢谢你的帮助。