将 std::string 转换为 LPBYTE 以使此代码正常工作的正确方法是什么?
string Name;
string Value;
RegEnumValueA(hKey, 0, const_cast<char*>(Name.c_str()), &dwSize, NULL, NULL, (LPBYTE)const_cast<char*>(Value.c_str()), &dwSize2);
当我尝试使用此代码时,字符串名称一切正常,但字符串值中存在错误的指针错误
将 std::string 转换为 LPBYTE 以使此代码正常工作的正确方法是什么?
string Name;
string Value;
RegEnumValueA(hKey, 0, const_cast<char*>(Name.c_str()), &dwSize, NULL, NULL, (LPBYTE)const_cast<char*>(Value.c_str()), &dwSize2);
当我尝试使用此代码时,字符串名称一切正常,但字符串值中存在错误的指针错误
指针参数应指向将由函数修改的有效缓冲区。未c_str()
初始化的字符串的 不指向任何有效的东西。
使用 char 缓冲区而不是string
s。这是 const_cast<> 完全不需要的一个很好的例子。
char Name[200], Value[200]; //Sizes are arbitrary
DWORD dwSize = sizeof(Name), dwSize2 = sizeof(Value);
RegEnumValueA(hKey, 0, Name, &dwSize, NULL, NULL, (LPBYTE)Value, &dwSize2);
获取所需std::string
数据的正确方法
//alloc buffers on stack
char buff1[1024];
char buff2[1024];
//prepare size variables
DWORD size1=sizeof(buff1);
DWORD size2=sizeof(buff2);
//call
RegEnumValueA(hKey, 0, buff1, &size1, NULL, NULL, (LPBYTE)buff2, &size2);
//"cast" to std::string
std::string Name(buff1);
std::string Value(buff2);
如果你真的想像你说的那样“投射” std::string
,你可以考虑下面的代码。它应该适用于std::string
我知道的任何实现,但它仍然有点“hacky”,我不推荐它。
string Name(1024, ' ');
string Value(1024, ' ');
DWORD dwSize=Name.size();
DWORD dwSize2=Value.size();
RegEnumValueA(hKey, 0, const_cast<char*>(&Name[0]), &dwSize, NULL, NULL, (LPBYTE)const_cast<char*>(&Value[0]), &dwSize2);