Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/46: Рейтинг темы: голосов - 46, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 15

const char в LPCWSTR

01.10.2013, 21:39. Показов 8601. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть программы вывести информацию об аппаратной части компьютера,а именно процессор,озу,диски,видеокарта,мышь,клав иатура.
Однако выдает следующие ошибки:
error C2061: синтаксическая ошибка: идентификатор "_LCHAR"
error C2664: RegOpenKeyExW: невозможно преобразовать параметр 2 из "const char [66]" в "LPCWSTR"
error C2664: RegQueryValueExW: невозможно преобразовать параметр 2 из "const char [10]" в "LPCWSTR"
error C2664: RegQueryValueExW: невозможно преобразовать параметр 2 из "const char [12]" в "LPCWSTR"
error C2664: RegOpenKeyExW: невозможно преобразовать параметр 2 из "const char [47]" в "LPCWSTR"
error C2664: RegQueryValueExW: невозможно преобразовать параметр 2 из "const char [20]" в "LPCWSTR"
Я понимаю,что нужно использовать вместо char(1байт) использовать wchar(2байта) префиксом _L или проще даже _T...Однако ничего не выходит,ребят...помогите пожалуйста...
Если можно поправьте код и что не так делаю?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//#include "stdafx.h"
#include <conio.h>
#include <Windows.h>
#include <stdio.h>
 
int _tmain(int argc, _LCHAR* argv[])
{
    printf("ХХХ\n");
    printf("ХХХ\n");
    printf("ХХХ\n\n");
    printf("\t\t\tDevice Configuration Of System\n");
    MEMORYSTATUS MemoryStatus;
    GlobalMemoryStatus(&MemoryStatus);
    printf("\tMemory Information:\n");
    printf("Physical memory in use: %d%%\n",MemoryStatus.dwMemoryLoad);
    printf("Total size of physical memory: %u\n",MemoryStatus.dwTotalPhys);
    printf("Available size of physical memory: %u\n",MemoryStatus.dwAvailPhys);
    printf("Total size of page file: %u\n",MemoryStatus.dwTotalPageFile);
    printf("Available size of page file: %u\n",MemoryStatus.dwAvailPageFile);
    printf("Total user virtual memory size: %u\n",MemoryStatus.dwTotalVirtual);
    printf("Available user virtual memory size: %u\n",MemoryStatus.dwAvailVirtual);
    printf("\tDisplay devices:\n");
    DISPLAY_DEVICE DisplayDevice;
    DisplayDevice.cb=sizeof(DisplayDevice);
    for (UINT iIndex=0;EnumDisplayDevices(NULL,iIndex,&DisplayDevice,0);iIndex++)
    {
        *((char*)&DisplayDevice.StateFlags)=0;
        printf("%s\n",DisplayDevice.DeviceString);
    }
    printf("\tKeyboard type:\n");
    switch(GetKeyboardType(0))
    {
    case 1:printf("IBM PC/XT or compatible (83-key) keyboard\n");break;
    case 2:printf("Olivetti ICO (102 key) keyboard\n");break;
    case 3:printf("IBM PC/AT (84 key) or similar\n");break;
    case 4:printf("IBM enhanced (101 or 102 keys) keyboard\n");break;
    case 5:printf("NOKIA 1050 or similar\n");break;
    case 6:printf("NOKIA 9140 or similar\n");break;
    case 7:printf("Japanese keyboard\n");break;
    }
    HKEY BootKey;
    unsigned char Buffer[100];
    DWORD BufferSize=100;
    ZeroMemory(Buffer,100);
    if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WOW\\boot.description",0,KEY_QUERY_VALUE,&BootKey))
    {
        if (!RegQueryValueEx(BootKey,"mouse.drv",NULL,NULL,Buffer,&BufferSize))
        {
            printf("\tMouse type:\n");
            printf("%s\n",Buffer);
        }
    }
    ZeroMemory(Buffer,100);
    BufferSize=100;
    if (!RegQueryValueEx(BootKey,"display.drv",NULL,NULL,Buffer,&BufferSize))
    {
        printf("\tDisplay type:\n");
        printf("%s\n",Buffer);
    }
    ZeroMemory(Buffer,100);
    BufferSize=100;
    if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_QUERY_VALUE,&BootKey))
    {
        if (!RegQueryValueEx(BootKey,"ProcessorNameString",NULL,NULL,Buffer,&BufferSize))
        {
            printf("\tProcessorName:\n");
            printf("%s\n",Buffer);
        }
    }
 
    printf("Press any key to exit\n");
    getch();
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2013, 21:39
Ответы с готовыми решениями:

const char*' to 'LPCWSTR
Код: ShellExecute(0, &quot;cmd.exe&quot;, &quot;open&quot;, &quot;/k powercfg -h off&quot;, NULL, SW_HIDE); при компиляции видает ошибку: ...

Аргумент типа const char* не совместим с параметром типа LPCWSTR
Начал учить win32 по книге Финогенова, вставил код первой проги в VS10, пишет мне ошибку &quot;аргумент типа const char* не совместим с...

Невозможно преобразовать параметр из "const char [12]" в "LPCWSTR"
#include &lt;windows.h&gt; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { ...

10
176 / 144 / 70
Регистрация: 01.05.2012
Сообщений: 414
01.10.2013, 21:45
Держи) Просто надо было преобразовние сделать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// aa.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <conio.h>
#include <Windows.h>
#include <stdio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    printf("ХХХ\n");
    printf("ХХХ\n");
    printf("ХХХ\n\n");
    printf("\t\t\tDevice Configuration Of System\n");
    MEMORYSTATUS MemoryStatus;
    GlobalMemoryStatus(&MemoryStatus);
    printf("\tMemory Information:\n");
    printf("Physical memory in use: %d%%\n",MemoryStatus.dwMemoryLoad);
    printf("Total size of physical memory: %u\n",MemoryStatus.dwTotalPhys);
    printf("Available size of physical memory: %u\n",MemoryStatus.dwAvailPhys);
    printf("Total size of page file: %u\n",MemoryStatus.dwTotalPageFile);
    printf("Available size of page file: %u\n",MemoryStatus.dwAvailPageFile);
    printf("Total user virtual memory size: %u\n",MemoryStatus.dwTotalVirtual);
    printf("Available user virtual memory size: %u\n",MemoryStatus.dwAvailVirtual);
    printf("\tDisplay devices:\n");
    DISPLAY_DEVICE DisplayDevice;
    DisplayDevice.cb=sizeof(DisplayDevice);
    for (UINT iIndex=0;EnumDisplayDevices(NULL,iIndex,&DisplayDevice,0);iIndex++)
    {
        *((char*)&DisplayDevice.StateFlags)=0;
        printf("%s\n",DisplayDevice.DeviceString);
    }
    printf("\tKeyboard type:\n");
    switch(GetKeyboardType(0))
    {
    case 1:printf("IBM PC/XT or compatible (83-key) keyboard\n");break;
    case 2:printf("Olivetti ICO (102 key) keyboard\n");break;
    case 3:printf("IBM PC/AT (84 key) or similar\n");break;
    case 4:printf("IBM enhanced (101 or 102 keys) keyboard\n");break;
    case 5:printf("NOKIA 1050 or similar\n");break;
    case 6:printf("NOKIA 9140 or similar\n");break;
    case 7:printf("Japanese keyboard\n");break;
    }
    HKEY BootKey;
    unsigned char Buffer[100];
    DWORD BufferSize=100;
    ZeroMemory(Buffer,100);
    if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WOW\\boot.description",0,KEY_QUERY_VALUE,&BootKey))
    {
        if (!RegQueryValueEx(BootKey,(LPCWSTR)"mouse.drv",NULL,NULL,Buffer,&BufferSize))
        {
            printf("\tMouse type:\n");
            printf("%s\n",Buffer);
        }
    }
    ZeroMemory(Buffer,100);
    BufferSize=100;
    if (!RegQueryValueEx(BootKey,(LPCWSTR)"display.drv",NULL,NULL,Buffer,&BufferSize))
    {
        printf("\tDisplay type:\n");
        printf("%s\n",Buffer);
    }
    ZeroMemory(Buffer,100);
    BufferSize=100;
    if (!RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCWSTR)"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_QUERY_VALUE,&BootKey))
    {
        if (!RegQueryValueEx(BootKey,(LPCWSTR)"ProcessorNameString",NULL,NULL,Buffer,&BufferSize))
        {
            printf("\tProcessorName:\n");
            printf("%s\n",Buffer);
        }
    }
 
    printf("Press any key to exit\n");
    getch();
    return 0;
}
2
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 15
01.10.2013, 22:34  [ТС]
Спасибо большое,теперь проблема посерьезнее... Видимо я криво вывожу данные из реестра...потому что у меня ничего не выводится,выводится лишь одна буква,не понятно почему...к примеру,что бы достать название процессора я иду в
"HARDWARE\\DESCRIPTION\\System\\CentralP rocessor\\0"
Оттуда из "ProcessorNameString" беру название,но оно выводит мне лишь одну букву...а именно "A",на машине этой стоит процессор Amd я предполагаю что оно выводит лишь первый символ. Пробовал вместо if поставить while,однако ситуацию это не спасло никак...как достать и вывести информацию о процессоре например,помогите пожалуйста.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2013, 10:06
Цитата Сообщение от _script_ Посмотреть сообщение
Просто надо было преобразовние сделать)
Это шутка, надо полагать ? Вы сами пробовали пользоваться этим "советом" ?
Да, программа после этого компилируется, вот только результаты ее запуска будут,
мягко говоря, странными.

Цитата Сообщение от Mokrischev Посмотреть сообщение
Видимо я криво вывожу данные из реестра...потому что у меня ничего не выводится,выводится лишь одна буква,не понятно почему
Потому что Вы передаете ANSI-строки (char *) в функции, которые ожидают строк в
"широких" символах (wchar_t *). А ошибки компилятора давите, благодаря совету,
данному выше.

Mokrischev, пишите так, например:

RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\...

А вместо printf используйте wprintf.
2
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
04.10.2013, 12:06
Было бы круто просто приведением типов сделать из char* в wchar_t*
+так же есть функции перевода этих типов.
wctomb() и mbtowc()
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.10.2013, 12:27
Цитата Сообщение от razor_ua Посмотреть сообщение
Было бы круто просто приведением типов сделать из char* в wchar_t*
Проблема в том, что char* может означать очень многое.
cp866, win-1251, utf-8... Поэтому выбор остается за программистом.
1
11 / 11 / 2
Регистрация: 20.05.2011
Сообщений: 71
04.10.2013, 12:43
агааа...
тогда ясно, почему все не так просто
0
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
04.10.2013, 13:35
А можно ли какой-нибудь макрос объявить???? чтот типо #define UNICODE что бы перед литераломи визде "L" не писать, или опцию компилятора какую?????
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.10.2013, 13:41
у тебя в настройках проекта указан юникод или что-то многобайтовое, потому компайлер по умолчанию использует соотв. варианты ф-й. если тебе не нужны эти фокусы, измени конфигурацию проекта, и геморрой исчезнет сам собой. все символы станут снова однобайтовыми.
1
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
04.10.2013, 13:47
Есть мнение, - и я с ним полностью согласен, - что использовать препроцессор
для выбора символьного типа для строк (char/wchar_t) - не очень хорошая идея.
Некоторые функции ведут себя по-разному, в зависимости от того, какой
используется вариант - юникодный или ANSI. Типичный пример - CreateProcess.
В итоге может получиться, что программа нормально работает, когда включен
multibyte, и выдает ошибки, если включен wide characters. Поэтому лучше всегда
все писать в явном виде - CreateProcessW вместо CreateProcess, WIN32_FIND_DATAW
вместо WIN32_FIND_DATA и т.д. Кстати, в стандартной библиотеке C++ тоже
используется этот подход: string/wstring, cout/wcout, ofstream/wofstream и т.д.

А использовать multi-byte сейчас - это вообще каменный век.
Из-за этого программа не сможет, например, корректно отображать кириллицу на
нерусских локализациях Windows, или там, где русский язык не установлен в
качестве дефолтного для программ, не поддерживающих Unicode.
2
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
04.10.2013, 13:56
Ок cпасибо, а если QtCreator у меня?)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2013, 13:56
Помогаю со студенческими работами здесь

Невозможно преобразовать "const char [7]" в "LPCWSTR"
wc.lpszClassName = &quot;OpenGL&quot;; Выдает ошибку: Невозможно преобразовать &quot;const char &quot; в &quot;LPCWSTR&quot; Как быть? Что...

Ошибка 'аргумент типа "const char *" несовместим с параметром типа "LPCWSTR"'
Здравствуйте, вот только начал изучать библиотеку WinApi и сразу же при первом примере в учебнике столкнулся с ошибкой: #include...

Столкнулся с ошибкой "аргумент типа "const char *" несовместим с параметром типа "LPCWSTR"
Привет, столкнулся с ошибкой &quot;аргумент типа &quot;const char *&quot; несовместим с параметром типа &quot;LPCWSTR&quot;&quot; HBITMAP hBitmap =...

argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
static std::vector&lt;std::string&gt; v; std::vector&lt;std::string&gt;::iterator it; ... TextOut(hdc, 0, y, it-&gt;data(), it-&gt;length()); ...

char to LPCWSTR
Добрый день! Программе требуется вычислить свободное место на диске. Букву диска вводит пользователь в переменную типа char. Но для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru