问题描述
错误:
error: no matching function for call to 'RegCreateKeyExW'
我所包含的内容:
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <string>
#include <winreg.h>
我的代码:
HKEY hKey;
LONG result = 0;
char *path = "SYstem\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001";
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,path,NULL,REG_OPTION_NON_VOLATILE,KEY_WRITE,&hKey,NULL) == ERROR_SUCCESS) {
printf("2. success \n");
} else {
printf("fail\n");
}
我已经尝试了一切,但这个错误不会消失,如果有人能帮助我,我会很感激!
解决方法
您正在调用 TCHAR
的 RegCreateKeyEx()
版本。从错误消息中可以清楚地看出 RegCreateKeyEx()
正在解析为 Unicode 版本 RegCreateKeyExW()
(因为 UNICODE
在您的构建配置中定义)。该版本采用宽 wchar_t
字符串作为输入,但您传入的是窄 char
字符串。
您可以:
- 使用
TCHAR
字符串来匹配您的代码正在调用的TCHAR
函数:
const TCHAR* path = TEXT("SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001");
- 使用 Unicode 字符串,以匹配在运行时实际调用的 Unicode 函数:
const wchar_t *path = L"SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001";
- 使用函数的 ANSI 版本
RegCreateKeyExA()
来匹配您的原始字符串:
if (RegCreateKeyExA(...) == ERROR_SUCCESS) {