【发布时间】:2025-12-12 18:30:01
【问题描述】:
我的代码:
HKEY hKey;
char *path = "SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001";
LONG result1 = RegOpenKeyExA(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS, &hKey);
QString q = QString::number(result1);
if (result1 == ERROR_SUCCESS) {
char buffer[39];
DWORD b = sizeof(buffer);
LONG result12 = RegGetValueA(hKey, NULL, "HwProfileGuid", RRF_RT_REG_SZ, NULL, buffer, &b);
if (result12 == ERROR_SUCCESS) {
std::string j;
LONG result13;
const std::vector<int> serial1{8, 4, 4, 4, 12};
std::string l = "{" + gen_random(serial1, "-") + "}";
const char *p = l.c_str();
if (p == buffer) {
j = "{" + gen_random(serial1, "-") + "}";
const char *i = j.c_str();
result13 = RegSetValueA(hKey, "HwProfileGuid", REG_SZ, i, sizeof(i));
} else {
result13 = RegSetValueA(hKey, "HwProfileGuid", REG_SZ, p, sizeof(p));
}
if (result13 == ERROR_SUCCESS) {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", "Success");
messageBox2.setFixedSize(500,200);
} else {
QString q = QString::number(result13);
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
} else {
QString q = QString::number(result12);
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
} else {
QMessageBox messageBox2;
messageBox2.critical(0,"Error", q);
messageBox2.setFixedSize(500,200);
}
我的操作系统是 Windows 64 位,编译器没有显示任何错误,并且由于某种原因,该函数可以创建一个新值,但不能更改现有值的数据。
我已经编辑并添加了完整的代码,因此您可以看到我正在处理的数据类型。
【问题讨论】:
-
单步调试代码时调试器会说什么?
-
@tadman 你明白我的意思。
-
我假设您正在尝试在这里比较字符串数据:
if (p == buffer)根据buffer是什么,这将不起作用。直接将std::string与另一个字符串进行比较,或者通过char 指针的隐式转换或使用strcmp。第一个在 C++ 中是首选。考虑将minimal reproducible example 放在一起,这可能会帮助您自己缩小问题范围或填补空白以供其他人帮助。 -
正如@RetiredNinja 指出的那样,
if (p == buffer)永远不会是true,因为这些指针指向不同的内存位置。此外,sizeof(p)是指针的大小(在本例中为 8),而不是字符串的长度。 -
@El_Sapo_Pepe 你说操作系统是 64 位的,但你是把你的应用程序编译成 32 位还是 64 位?注册表为 32 位和 64 位应用程序提供了单独的区域,因此请阅读 Accessing an Alternate Registry View 并在需要时使用适当的
KEY_WOW64_(32|64)KEY标志。此外,RegSetValueA()是旧版 16 位 API,您应该改用RegSetValueExA()。
标签: c++ windows winapi registry