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

Реализация IsProcessorFeaturePresent на С++

05.05.2017, 01:44. Показов 1956. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть совсем небольшой код на реализацию IsProcessorFeaturePresent на C# но мне нужно на С++, не могу понять как это сделать на С++.

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
    class Program
    {
        static void Main(string[] args)
        {
            foreach (ProcessorFeature feature in System.Enum.GetValues(typeof(ProcessorFeature)))
            {
                System.Console.WriteLine(feature.ToString() + "\t: " + IsProcessorFeaturePresent(feature));
            }
        }
 
        [System.Runtime.InteropServices.DllImport("Kernel32")]
        static extern bool IsProcessorFeaturePresent(ProcessorFeature processorFeature);
 
        enum ProcessorFeature : uint
        {
            PF_FLOATING_POINT_PRECISION_ERRATA = 0,
            PF_FLOATING_POINT_EMULATED = 1,
            PF_COMPARE_EXCHANGE_DOUBLE = 2,
            PF_MMX_INSTRUCTIONS_AVAILABLE = 3,
            PF_PPC_MOVEMEM_64BIT_OK = 4,
            PF_ALPHA_BYTE_INSTRUCTIONS = 5,
            PF_XMMI_INSTRUCTIONS_AVAILABLE = 6,
            PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7,
            PF_RDTSC_INSTRUCTION_AVAILABLE = 8,
            PF_PAE_ENABLED = 9,
            PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10,
            PF_SSE_DAZ_MODE_AVAILABLE = 11,
            PF_NX_ENABLED = 12,
            PF_SSE3_INSTRUCTIONS_AVAILABLE = 13,
            PF_COMPARE_EXCHANGE128 = 14,
            PF_COMPARE64_EXCHANGE128 = 15,
            PF_CHANNELS_ENABLED = 16,
            PF_XSAVE_ENABLED = 17,
            PF_SECOND_LEVEL_ADDRESS_TRANSLATION = 20,
            PF_VIRT_FIRMWARE_ENABLED = 21,
        }
    }
Пытаюсь просто создать перечисление enum на с++ он ругается что "требуется идентификатор", причем он стал ругаться как подключил Windows.h и Kernel32.lib
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
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#pragma comment (lib, "Kernel32.lib")
using namespace std;
 
 
 
int main()
{
    enum enumProcessorFeature : uint32_t
    {
        PF_FLOATING_POINT_PRECISION_ERRATA = 0,
        PF_FLOATING_POINT_EMULATED = 1,
        PF_COMPARE_EXCHANGE_DOUBLE = 2,
        PF_MMX_INSTRUCTIONS_AVAILABLE = 3,
        PF_PPC_MOVEMEM_64BIT_OK = 4,
        PF_ALPHA_BYTE_INSTRUCTIONS = 5,
        PF_XMMI_INSTRUCTIONS_AVAILABLE = 6,
        PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7,
        PF_RDTSC_INSTRUCTION_AVAILABLE = 8,
        PF_PAE_ENABLED = 9,
        PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10,
        PF_SSE_DAZ_MODE_AVAILABLE = 11,
        PF_NX_ENABLED = 12,
        PF_SSE3_INSTRUCTIONS_AVAILABLE = 13,
        PF_COMPARE_EXCHANGE128 = 14,
        PF_COMPARE64_EXCHANGE128 = 15,
        PF_CHANNELS_ENABLED = 16,
        PF_XSAVE_ENABLED = 17,
        PF_SECOND_LEVEL_ADDRESS_TRANSLATION = 20,
        PF_VIRT_FIRMWARE_ENABLED = 21
    };
    extern bool IsProcessorFeaturePresent(enumProcessorFeature processorFeature);
 
 
    cin.get();
    return 0;
}
 
 
}
Что я делаю не так?, Может кто нибудь может выручить ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2017, 01:44
Ответы с готовыми решениями:

Реализация
Такое через радио инпут делать или как? в первый раз такую штуку делаю

Реализация
Хочу создать программу Простую (при наживании на кнопку к примеру ок) Создавался бат файл с моими параметрами,создается в папке в с...

Реализация на C#
Как в C# работать с WinAPI? Например, я пишу hwnd h = FindWindow(nil,'Безымянный - Блокнот'); утверждает, что нет такой функции. Какой...

7
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
05.05.2017, 02:07
C++
1
 : uint32_t
не нужно. И вообще мне кажется что этот enum уже есть где-то в системных хидерах...

И функцию IsProcessorFeaturePresent объявлять не нужно, просто подключите необходимые хидеры...

Какие именно хидеры нужны можно посмотреть на MSDN...
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
05.05.2017, 02:21  [ТС]
Someone007, я подключил все что там сказано, это Kernel32.lib и Windows.h, если я конечно правильно это сделал.
Да, пишет что уже есть определение в winnt.h
C++
1
#define PF_FLOATING_POINT_PRECISION_ERRATA   0
и пишет "требуется идентификатор" на все поля enum-а, незнаю как быть, и как с foreach на с++ ?
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
05.05.2017, 10:51
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
 
#include <Windows.h>
 
int main()
{
    BOOL ret = 0;
    CHAR textBuffer[8] = {0};
 
    ret = IsProcessorFeaturePresent (PF_MMX_INSTRUCTIONS_AVAILABLE);
    wsprintf (textBuffer, "ret: %d", ret);
    MessageBox (0, textBuffer, "", 0);
    return 0;
}
mr_aleks, компилируется?
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
05.05.2017, 21:24  [ТС]
Digit@ll, в MessageBox вывелось
ret: 1


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
 
#include <Windows.h>
 
int main()
{
    BOOL ret = 0;
    CHAR textBuffer[8] = { 0 };
 
    ret = IsProcessorFeaturePresent(PF_MMX_INSTRUCTIONS_AVAILABLE);
    wsprintf((LPWSTR)textBuffer, L"ret: %d", ret);
    MessageBox(0, (LPCWSTR)textBuffer, L"", 0);
    return 0;
}
Добавлено через 4 минуты
Digit@ll,
Можно сделать в одну строку
C++
1
SetWindowText(hStat, _T("PF_MMX_INSTRUCTIONS_AVAILABLE\t: %s\n"), IsProcessorFeaturePresent(7) ? "yes" : "no");
Но я думал думал, как сделать это в цикле, что бы выводилось такого вида:
PF_MMX_INSTRUCTIONS_AVAILABLE: yes
И так далее, все что б инструкции перебирало. В цикле нужно будет саму инструкцию преобразовать в строку чтоб название выводилось, но как это реализовать пока не понимаю.
Создать enum я так понимаю не разрешает, из за того что уже эти инструкции уже определены в winnt.h
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
05.05.2017, 21:30
Цитата Сообщение от mr_aleks Посмотреть сообщение
В цикле нужно будет саму инструкцию преобразовать в строку чтоб название выводилось, но как это реализовать пока не понимаю.
Т.к. в С++ нельзя enum преобразовать в строку напрямую в отличие от C#... Просто делаете массив, в него забиваете строки по соответствующим enum индексам, все...

C++
1
2
3
4
5
6
7
8
for (int i = 0; i < max_feature_index; i++)
{
     if (IsProcessorFeaturePresent(i))
     {
           char *featureName= arrayOfFeatureNames[i];
           // куда-то выводим...
     }
}
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
06.05.2017, 05:44  [ТС]
Someone007, вы имели ввиду так ?
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
    char *featureName[100]
    {
        "PF_FLOATING_POINT_PRECISION_ERRATA",
        "PF_FLOATING_POINT_EMULATED",
        "PF_COMPARE_EXCHANGE_DOUBLE",
        "PF_MMX_INSTRUCTIONS_AVAILABLE",
        "PF_PPC_MOVEMEM_64BIT_OK",
        "PF_ALPHA_BYTE_INSTRUCTIONS",
        "PF_XMMI_INSTRUCTIONS_AVAILABLE",
        "PF_3DNOW_INSTRUCTIONS_AVAILABLE",
        "PF_RDTSC_INSTRUCTION_AVAILABLE",
        "PF_PAE_ENABLED",
        "PF_XMMI64_INSTRUCTIONS_AVAILABLE",
        "PF_SSE_DAZ_MODE_AVAILABLE",
        "PF_NX_ENABLED",
        "PF_SSE3_INSTRUCTIONS_AVAILABLE",
        "PF_COMPARE_EXCHANGE",
        "PF_COMPARE64_EXCHANGE",
        "PF_CHANNELS_ENABLED",
        "PF_XSAVE_ENABLED",
        "PF_ARM_VFP_32_REGISTERS_AVAILABLE",
        "PF_ARM_NEON_INSTRUCTIONS_AVAILABLE",
        "PF_SECOND_LEVEL_ADDRESS_TRANSLATION",
        "PF_VIRT_FIRMWARE_ENABLED",
        "PF_RDWRFSGSBASE_AVAILABLE",
        "PF_FASTFAIL_AVAILABLE",
        "PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE",
        "PF_ARM_64BIT_LOADSTORE_ATOMIC",
        "PF_ARM_EXTERNAL_CACHE_AVAILABLE",
        "PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE",
        "PF_RDRAND_INSTRUCTION_AVAILABLE"
    };
    for (int i = 0; i < 29; i++)
    {
        printf("%-35s \t: %s\n\r", featureName[i], IsProcessorFeaturePresent(i) ? "true" : "false");
    }
Вроде работает, не знаю как на счет правильно или нет.
0
06.05.2017, 11:34

Не по теме:

На MSDN'е, как всегда, нет описания всех значений.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2017, 11:34
Помогаю со студенческими работами здесь

Реализация
Есть меню слик слайдера Первый пункт должен быть font-size: 18 пикс и так увеличиваться до punkt_active снизу все также, только уже...

Реализация
Кто может помочь с одним моментом в курсовике , курсовик сделан почти весь, но там буквально 5-7 строчек кода нужно чтобы всё заработало. ...

Реализация if-else
Привет всем, задачка вроде не сложная, но никак не могу к ней подступиться. Пишу скрипт. В скрипт передается параметр идентификатор...

Реализация ЛС
Добрый день, нужна помощь. Начинаю делать Личные сообщения. Стразу возникает вопрос. Как достать все значения из БД и поместить их в...

Реализация БД в MO
Здравствуйте форумчане! :) Имеется таблица с данными. Хотелось бы , чтобы при открытии документа выскакивало окошко , где можно было бы...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru