无法识别我的 winreg 功能

问题描述

错误

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");
        }

我已经尝试了一切,但这个错误不会消失,如果有人能帮助我,我会很感激!

解决方法

您正在调用 TCHARRegCreateKeyEx() 版本。从错误消息中可以清楚地看出 RegCreateKeyEx() 正在解析为 Unicode 版本 RegCreateKeyExW()(因为 UNICODE 在您的构建配置中定义)。该版本采用宽 wchar_t 字符串作为输入,但您传入的是窄 char 字符串。

您可以:

  1. 使用 TCHAR 字符串来匹配您的代码正在调用的 TCHAR 函数:
const TCHAR* path = TEXT("SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001");
  1. 使用 Unicode 字符串,以匹配在运行时实际调用的 Unicode 函数:
const wchar_t *path = L"SYSTEM\\CurrentControlSet\\Control\\IDConfigDB\\Hardware Profiles\\0001";
  1. 使用函数的 ANSI 版本 RegCreateKeyExA() 来匹配您的原始字符串:
if (RegCreateKeyExA(...) == ERROR_SUCCESS) {