c++ RegSetValueEx 仅在注册表中设置一个字符值
我正在对数据进行 (char *) 转换,但我在注册表中只得到一个 char 值。如果 我不使用强制转换 msvc 2010 告诉我参数类型 LPCTSTR 与 const char * 不兼容。
有人可以帮助我吗?
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
LONG openRes = RegOpenKeyEx(HKEY_CURRENT_USER, sk, 0, KEY_ALL_ACCESS , &hKey);
if (openRes==ERROR_SUCCESS) {
printf("Success opening key.");
} else {
printf("Error opening key.");
}
LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = L"TestData\0";
LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);
if (setRes == ERROR_SUCCESS) {
printf("Success writing to Registry.");
} else {
printf("Error writing to Registry.");
}
cout << setRes << endl;
LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
printf("Success closing key.");
} else {
printf("Error closing key.");
}
I'm casting (char * ) on data and i'm getting only one char value in the registry. if
i don't use the casting msvc 2010 tells me that the argument type LPCTSTR is incompatible with const char *.
can someone help me?
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
LONG openRes = RegOpenKeyEx(HKEY_CURRENT_USER, sk, 0, KEY_ALL_ACCESS , &hKey);
if (openRes==ERROR_SUCCESS) {
printf("Success opening key.");
} else {
printf("Error opening key.");
}
LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = L"TestData\0";
LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);
if (setRes == ERROR_SUCCESS) {
printf("Success writing to Registry.");
} else {
printf("Error writing to Registry.");
}
cout << setRes << endl;
LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
printf("Success closing key.");
} else {
printf("Error closing key.");
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将
L"TestData"
替换为_T("TestData");
并将strlen(data)+1
替换为tcslen(data) * sizeof(TCHAR));
所以你的代码看起来像这样:
replace the
L"TestData"
by_T("TestData");
andstrlen(data)+1
bytcslen(data) * sizeof(TCHAR));
so your code looks like this :
strlen(data)
可能返回值 1,因为 strlen 需要 char* 并且L"TestData\0"
很宽。使用TEXT("TestData\0")
并调用_tcslen(data)
。请注意,
RegSetValueEx
需要数据的大小,因此请使用_tcslen(data) * sizeof(TCHAR)
strlen(data)
is probably returning a value of 1, as strlen expects a char* andL"TestData\0"
is wide. UseTEXT("TestData\0")
and call_tcslen(data)
.Note that
RegSetValueEx
expects the sizeof the data, so use_tcslen(data) * sizeof(TCHAR)
你在哪里投射数据?
无论哪种方式,看起来您可能正在使用宽字符,但您似乎正在使用“普通旧”strlen - 而不是 wcslen 或其他一些旨在处理宽字符字符串的函数。
Where are you casting data?
Either way, it looks like you may be working with wide characters, but you seem to be using "plain old" strlen - instead of wcslen or some other function intended to work with wide-character strings.