Ошибка вычисления длины строки wchar_t - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Делаю автозагрузку приложения, проблема в lstrlenW(appPath), она не вычисляет полную длину строки, отбрасывает несколько последних символов.
  // Получаем путь к приложению
    wchar_t appPath[32767];
    GetModuleFileNameW(NULL, appPath, 32767);
 
    // Заполняем путь в реестре
    wchar_t *autorunPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
    wchar_t *appName = L"CApplication.exe";
 
    // Объявляем ключ
    HKEY hKey = NULL;
 
    // Записываем в реестр
    RegOpenKeyExW(HKEY_CURRENT_USER, autorunPath, 0, KEY_WRITE, &hKey);
    RegSetValueExW(hKey, appName, 0, REG_SZ, (BYTE *)appPath, lstrlenW(appPath));
    RegCloseKey(hKey);
Посоветовали использовать wcslen, ничего не изменилось, так же теряется часть пути.

Решение задачи: «Ошибка вычисления длины строки wchar_t»

textual
Листинг программы
// Автозагрузка
void SetAutorun()
{
    // Получаем путь к приложению
    wchar_t appPath[32767];
    GetModuleFileNameW(NULL, appPath, 32767);
 
    // Заполняем путь в реестре
    wchar_t *autorunPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
    wchar_t *appName = L"CApplication.exe";
 
    // Объявляем ключ
    HKEY hKey = NULL;
 
    // Записываем в реестр
    RegOpenKeyExW(HKEY_CURRENT_USER, autorunPath, 0, KEY_WRITE, &hKey);
    RegSetValueExW(hKey, appName, 0, REG_SZ, (BYTE *)appPath, (lstrlenW(appPath) * sizeof(wchar_t)) + 2);
    RegCloseKey(hKey);
}

Объяснение кода листинга программы

  1. Получение пути к приложению
  2. Заполнение пути в реестре
  3. Объявление ключа
  4. Запись в реестр
  5. Закрытие ключа

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы