1. 程式人生 > 實用技巧 >C++ 將filesystem::path轉換為const BYTE*

C++ 將filesystem::path轉換為const BYTE*

std::string s = fs::temp_directory_path().append(filename).string();

LPCBYTE str = reinterpret_cast<LPCBYTE>(s.c_str()),
RegSetValueExA的實戰示例:
// using std::string...

HKEY newValue;

// don't use RegOpenKey()! It is provided only for backwards compatibility with 16bit apps...
if (RegOpenKeyExA(HKEY_CURRENT_USER, "
Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &newValue) == 0) { // this may lose data for non-ASCII characters! std::string s = fs::temp_directory_path().append(filename).string(); // this will convert the ANSI string to Unicode for you... RegSetValueExA(newValue, "
myprogram", 0, REG_SZ, reinterpret_cast<LPCBYTE>(s.c_str()), s.size()+1); RegCloseKey(newValue); } return 0; // using std::wstring... HKEY newValue; // don't use RegOpenKey()! It is provided only for backwards compatibility with 16bit apps... if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run
", 0, KEY_SET_VALUE, &newValue) == 0) { // no data loss here! std::wstring s = fs::temp_directory_path().append(filename).wstring(); // no ANSI->Unicode conversion is performed here... RegSetValueExW(newValue, L"myprogram", 0, REG_SZ, reinterpret_cast<LPCBYTE>(s.c_str()), (s.size()+1) * sizeof(WCHAR)); RegCloseKey(newValue); } return 0;