Visual C ++ Byte * - PullRequest
       2

Visual C ++ Byte *

1 голос
/ 11 марта 2011

Я только что переключился с Dev C ++ на Visual C ++, и в моем коде появляется ошибка, которую я не получал при использовании Dev C ++.Ошибка:

------ Build started: Project: badman_flex, Configuration: Debug Win32 ------
main.cpp
c:\documents and settings\administrator\my documents\visual studio 2010\projects\badman_flex\badman_flex\main.cpp(49): error C2664: 'RegSetValueExA' : cannot convert    parameter 5 from 'char *' to 'const BYTE *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or    function-style cast
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Код в этой строке:

RegOpenKeyEx(HKEY_LOCAL_MACHINE, regPath, 0, KEY_ALL_ACCESS, &hKey);  
RegQueryValueEx(hKey,"Userinit", 0, 0, (BYTE*)buff, &dwBufSize);

if(!strstr(buff, "myapp.exe")) {  

char *filepath = strcat(windowsDir, filename);
char *newRegValue = strcat(buff, filepath);
RegSetValueEx(hKey, "Userinit", 0, REG_SZ, newRegValue, strlen(newRegValue));

Что такое байт и почему VC ++ вызывает ошибку?

Спасибо

Редактировать Я напечатал и все заработало: D

Ответы [ 2 ]

1 голос
/ 11 марта 2011

RegSetValueEx () API принимает различные типы данных для записи в реестр.Его пятый аргумент - указатель на эти данные, объявленный как BYTE *.Вы передаете ему символ *, неправильный тип.Обратите внимание, что вы делаете это правильно несколько строк назад в вызове RegQueryValueEx ().Исправить:

 RegSetValueEx(hKey, "Userinit", 0, REG_SZ, (BYTE*)newRegValue, strlen(newRegValue));
0 голосов
/ 11 марта 2011

из windef.h

typedef unsigned char BYTE;

Так что либо включите windef.h, либо определите это самостоятельно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...