c++ - 在 C++ 中将字符串转换为 LPVOID 和 LPCWSTR

标签 c++ string winhttp

我正在使用 C++ 中的 winHTTP API,我已经开始为我的应用程序编写一个包装器类。为简单起见,我有许多函数可以采用字符串参数并在 winHTTP 调用中使用它们。然而,其中许多要求数据为 LPVOID 或 LPCWSTR。我可以通过使我的包装函数采用 LPVOID 或 LPCWSTR 参数来使其全部工作,但我更喜欢字符串参数。那么有什么方法可以从 sting 转换为 LPVOID/LPCWSTR 吗?

我的尝试(下面)只是产生了乱码

bool httpWrapper::setPostData(const string &postData){

 _postData = (LPVOID)postData.c_str();

 _postData_len = 47;

 return false;
}

任何帮助将不胜感激

谢谢

最佳答案

注意 c_str() 的行为。它返回的char*是临时的,在字符串被修改或销毁后会失效。这很可能在使用 _postData 之前发生,可能在 setPostData() 返回时立即发生。您需要复制它。

下一个问题是 c_str() 不返回 LPCWSTR,它是一个 LPCSTR。一个 Actor 不能转换它,产生中文。您需要使用 MultiByteToWideChar() 将其转换为 Unicode 字符串。

关于c++ - 在 C++ 中将字符串转换为 LPVOID 和 LPCWSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2211755/

相关文章:

http - 从 VBA (WinHTTP) 通过 HTTP 上传文件

autohotkey - WinHttpRequest 超时

.net - .NET 中的 WinHttp.WinHttpRequest

c++ - CFLocaleCopy当前陈旧值

python - 如何让 str.translate 使用 Unicode 字符串?

c++ - 32 位 Linux clock() 溢出

c++ - 当许多 unordered_map<string, double> 具有完全相同的字符串设置为键时如何节省内存

c# - 将 C# 日期时间转换为字符串并返回

c++ - 内部类中的广义复制构造函数

c++ - C++ 中函数或类之前的宏是什么?