【问题标题】:Newbie to pointers新手指点
【发布时间】:2011-05-06 12:30:27
【问题描述】:

我需要将cs 值放在对象client 的括号内。我已经像这样处理cs 变量:

CString cs (bar_->GetHostName());

但仍然无法将值放入以下代码中:

WinHttpClient client(/* dont know what value to put here */);   
client.SendHttpRequest();

错误信息:

Error   1   error C2664: 'WinHttpClient::WinHttpClient(const std::wstring &)' : cannot convert parameter 1 from 'const char [15]' to 'const std::wstring &' c:\test.cpp

编辑:

   CString cs (bar_->GetHostName());
   WinHttpClient client(/*??*/);
   client.SendHttpRequest();
   wstring httpResponseHeader = client.GetHttpResponseHeader();
   wstring httpResponse = client.GetHttpResponse();
   writeToStorage(httpResponse.c_str());

我的函数writeToStorage 假设要向文本文件写入一些内容。似乎,覆盖了没有字符串的文件..我不知道为什么:(

【问题讨论】:

    标签: c++


    【解决方案1】:

    看起来您正在使用 MFC 的 CString,并且您想将 cs 传递给 WinHttpClient

    这是你的做法:

    CString cs (bar_->GetHostName());
    std::string s((LPCTSTR)cs);
    WinHttpClient client(s);   
    client.SendHttpRequest();
    

    如果 WinHttpClient 有一个接受 wchar* 的重载构造函数,那么你可以这样做:

    CString cs (bar_->GetHostName());
    WinHttpClient client(cs);   
    client.SendHttpRequest();
    

    但是,如果您想传递其他答案中提到的纯文本,请执行以下操作:

    WinHttpClient client(_T("Text"));   
    client.SendHttpRequest();
    

    在 Visual C++ 中,使用 _T 比使用 L 更好

    【讨论】:

      【解决方案2】:

      您需要提供std::wstring

      这个问题解释了转换:How to convert CString and ::std::string ::std::wstring to each other?

      【讨论】:

        【解决方案3】:

        WinHttpClient client(L"text");而不是WinHttpClient client("text");

        【讨论】:

          【解决方案4】:

          阿比克斯是对的。你应该在字符串之前写 L 。但它只适用于常量字符串。 L 是将 char[] 转换为 wchar_t[] - Unicode char 数组的宏。对于动态转换,您必须使用MultiByteToWideChar (...) 函数。

          【讨论】:

          • "L" 不是宏,它是宽字符串文字的一部分。
          猜你喜欢
          • 2013-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-01
          • 2017-09-24
          相关资源
          最近更新 更多