我正在使用 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/