使用Libcurl作为Win32 DLL C ++

时间:2017-08-16 02:10:06

标签: c++ dll libcurl

我想创建一个在C ++中使用libcurl的win32 DLL。我可以运行curl init和escape但是我无法执行CURLOPT_URL。这是我的代码:

EXPORT_VBNET char *MyExported( char *a, char *b){  
      const char* success = "executed!";
      const char* failed = "error!";
      char * result;
      result = new char[strlen(failed) + 1];
      strcpy(result, failed);
      CURL *curl = curl_easy_init();
      if(curl) {
              curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/"); // ERROR Debug Assertion Failed!
              curl_easy_perform(curl);
              result = new char[strlen(success) + 1];
              strcpy(result, success);
       }
       return result;}

我的代码可以编译,但是当我调用dll时,我收到错误“Debug Assertion Failed!”。那么我应该怎么做才能修复我的代码,我的意思是这有什么问题?

如果有人回答,我将不胜感激。因为我花了很多时间来搜索这个问题。 :)

2 个答案:

答案 0 :(得分:0)

您应该从Win32 DLL中调用curl_global_init(CURL_GLOBAL_DEFAULT),而不是从VB.NET层调用。此外,在Win32 DLL本身内部封装所有libcurl api调用,如curl_easy_cleanup()等。从API设计的角度来看,您可以将用于初始化,清理等的单独方法导出到VB.NET层。

答案 1 :(得分:0)

是的@Asesh是对的,但是Curl_global_init与我的代码中的问题无关。问题出在我的运行时库和看到此链接后

https://curl.haxx.se/mail/lib-2011-10/0085.html。我已经解决了我的问题。

我需要替换

C:\ libcurl中\建立\的libcurl-VC10 86释放静电-IPv6的SSPI-winssl

C:\ libcurl中\建立\的libcurl-VC10 86调试静电-IPv6的SSPI-winssl (包括& Lib目录)

Libcurl_a.lib libcurl_a_debug.lib。

使用运行时库/ MDd。

最后:)。