c++ RegSetValueEx 仅在注册表中设置一个字符值

发布于 2024-10-08 12:48:52 字数 892 浏览 0 评论 0原文

我正在对数据进行 (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

地狱即天堂 2024-10-15 12:48:53

L"TestData" 替换为 _T("TestData"); 并将 strlen(data)+1 替换为 tcslen(data) * sizeof(TCHAR));

所以你的代码看起来像这样:

LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = TEXT("TestData");

LONG setRes = RegSetValueEx(hKey, value, 0, REG_SZ, (LPBYTE)data, _tcslen(data) * sizeof(TCHAR));

replace the L"TestData" by _T("TestData"); and strlen(data)+1 by tcslen(data) * sizeof(TCHAR));

so your code looks like this :

LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = TEXT("TestData");

LONG setRes = RegSetValueEx(hKey, value, 0, REG_SZ, (LPBYTE)data, _tcslen(data) * sizeof(TCHAR));
云醉月微眠 2024-10-15 12:48:52

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* and L"TestData\0" is wide. Use TEXT("TestData\0") and call _tcslen(data).
Note that RegSetValueEx expects the sizeof the data, so use _tcslen(data) * sizeof(TCHAR)

一曲琵琶半遮面シ 2024-10-15 12:48:52

你在哪里投射数据?

无论哪种方式,看起来您可能正在使用宽字符,但您似乎正在使用“普通旧”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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文