std::字符串与 PCWSTR 的对话

std::string converstion to PCWSTR

本文关键字:对话 PCWSTR 字符串 std      更新时间:2023-10-16

我从用户那里获取信息并将它们保存在 std::string 变量中,如下所示:

std::string username;
std::string domain;
std::string hash_ntlm;
std::string process_name;
std::cout << "ntUsername: ";
std::getline(std::cin, username);
std::cout << "tDomain: ";
std::getline(std::cin, domain);
std::cout << "tNTLM Hash: ";
std::getline(std::cin, hash_ntlm);
std::cout << "tProcess: ";
std::getline(std::cin, process_name);
std::cout << "n";

不幸的是,我必须使用函数来获取带有 PCWSTR 数据类型的参数,如下所示:

bool Function(ProcessCreateType arg_type, PCWSTR arg_command_Line, DWORD arg_process_flags, HANDLE arg_user_token, DWORD arg_logon_flags,  PCWSTR arg_user, PCWSTR arg_domain, PCWSTR arg_password, PPROCESS_INFORMATION arg_process_infos, BOOL arg_auto_close_handle)

但是当我用 PCWSTR 数据类型重新定义变量时,我无法使用 std::getline(std::cin, domain( 获取它们;或者我无法通过调用 c_str(( 方法传递它们 std::string 变量。我应该如何解决使用 PCWSTR 和 std::string 的这个问题。

我认为您正在读取一个ansi/utf8文件。所以有了:

inline std::wstring to_wide(const char* ps) { return std::wstring(boost::locale::conv::utf_to_utf<wchar_t>(ps)); }
inline std::wstring to_wide(const std::string& str) { return to_wide(str.c_str()); }
inline std::string to_narrow(const CString& str) { return std::string(boost::locale::conv::utf_to_utf<char>((LPCTSTR)str)); }
inline std::string to_narrow(const wchar_t* ps) { return std::string(boost::locale::conv::utf_to_utf<char>(ps)); }
inline std::string to_narrow(const std::wstring& str) { return to_narrow(str.c_str()); }

您可以在多字节和 unicode 之间进行转换。我有 xml 和其他 ansi/utf8 文件,需要以 LPCTSTR 等形式呈现。

cCtrl.SetWindowText(to_wide(a_std_string).c_ctr());

这意味着使用提升进行编译。还有很多其他方法。但我发现这是最简单的。

更新:

跟随维克多的链接。看起来通过 c++11,您可以使用标准库。过去,它是助推器。但我会遵循相同的原理,像使用boost一样创建内联式衬里。