如何解决注册表 RegQueryValueExW
在这种情况下,是否可以将注册表中的值不读取到字符数组,而是直接读取到 AnsiString?
LONG result;
wchar_t buf[255] = {0};
DWORD dwBufSize = sizeof(buf);
String d = "Nazwa";
DWORD dwType = REG_SZ;
result = ::RegQueryValueExW( hkSoftware,(LPCWSTR)(d.c_str()),NULL,&dwType,(LPBYTE)&buf,&dwBufSize );
解决方法
首先,您的代码示例没有使用 AnsiString
。在 C++Builder 2009 及更高版本中,String
是 UnicodeString
的别名。
是的,您可以将 UnicodeString
与 RegQueryValueExW()
一起使用,而无需使用类型转换。 UnicodeString::c_str()
返回 WideChar*
,WideChar
是 Windows 上 wchar_t
的别名,因此 WideChar*
(又名 wchar_t *
)可以隐式转换为 { {1}}(又名 LPCWSTR
),例如:
const wchar_t *
您也可以使用 LONG result;
wchar_t buf[255] = {0};
DWORD dwBufSize = sizeof(buf);
UnicodeString d = L"Nazwa";
DWORD dwType = REG_SZ;
result = ::RegQueryValueExW( hkSoftware,d.c_str(),NULL,&dwType,reinterpret_cast<LPBYTE>(&buf),&dwBufSize );
作为缓冲区来接收来自 UnicodeString
的字符串数据,例如:
RegQueryValueExW()
话虽如此,您应该考虑使用 C++Builder 的 TRegistry
类,而不是直接使用 Win32 Registry API。 LONG result;
UnicodeString buf;
buf.SetLength(...);
DWORD dwBufSize = ByteLength(buf);
UnicodeString d = L"Nazwa";
DWORD dwType = REG_SZ;
result = ::RegQueryValueExW( hkSoftware,reinterpret_cast<LPBYTE>(buf.c_str()),&dwBufSize );
if ( result == 0 ) {
buf.SetLength(dwBufSize/sizeof(WideChar));
...
}
有多种读取不同类型数据的方法,包括 ReadString()
用于 TRegistry
数据,例如:
String
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。