599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1

VARENUM to String

22.06.2020, 19:57. Показов 20725. Ответов 2

Студворк — интернет-сервис помощи студентам
Чёт запутался.
Согласно мелкософтовому сайту
Имеем "сплошной", без разрывов enum:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
typedef enum VARENUM {
  VT_EMPTY,
  VT_NULL,
  VT_I2,
  VT_I4,
  VT_R4,
  VT_R8,
  VT_CY,
  VT_DATE,
  VT_BSTR,
  VT_DISPATCH,
  VT_ERROR,
  VT_BOOL,
  VT_VARIANT,
  VT_UNKNOWN,
  VT_DECIMAL,
  VT_I1,
  VT_UI1,
// и так далее
}


Согласно wtypes.h от борланда (билдер рио)

Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
enum VARENUM
    {
        VT_EMPTY    = 0,
        VT_NULL = 1,
        VT_I2   = 2,
        VT_I4   = 3,
        VT_R4   = 4,
        VT_R8   = 5,
        VT_CY   = 6,
        VT_DATE = 7,
        VT_BSTR = 8,
        VT_DISPATCH = 9,
        VT_ERROR    = 10,
        VT_BOOL = 11,
        VT_VARIANT  = 12,
        VT_UNKNOWN  = 13,
        VT_DECIMAL  = 14,
        VT_I1   = 16,
// и так далее
}


Т.е. по мелкософту VT_I1 равняeтся 15, борланду (да простит меня ембарсадеро) уже 16. Далее хуже.
Кому верить неясно.
Может есть стандартная WinAPIшная функция, способная дать текстовое описание VARTYPE ? Гуглю, а всё бестолку...

Добавлено через 21 минуту
Вопрос с непонятками между борландом и мелкософтом снят - это сайт мелкомягких врёт.
Вот кусок из winsdk-10 с гитхаба:
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
enum VARENUM
    {
        VT_EMPTY    = 0,
        VT_NULL = 1,
        VT_I2   = 2,
        VT_I4   = 3,
        VT_R4   = 4,
        VT_R8   = 5,
        VT_CY   = 6,
        VT_DATE = 7,
        VT_BSTR = 8,
        VT_DISPATCH = 9,
        VT_ERROR    = 10,
        VT_BOOL = 11,
        VT_VARIANT  = 12,
        VT_UNKNOWN  = 13,
        VT_DECIMAL  = 14,
        VT_I1   = 16,
        VT_UI1  = 17,
        VT_UI2  = 18,
        VT_UI4  = 19,

У него проект уже на Visual Studio, видать и хидеры ихние же - совпадают с борландовскими.

Остался вопрос по уже существующей функции именно из Win API, а не из билдера.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2020, 19:57
Ответы с готовыми решениями:

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте класс Animal. Добавьте поля string...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population. Создание объектов может происходить как без...

2
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
22.06.2020, 20:41
Лучший ответ Сообщение было отмечено drfaust как решение

Решение

Цитата Сообщение от drfaust Посмотреть сообщение
Может есть стандартная WinAPIшная функция, способная дать текстовое описание VARTYPE ? Гуглю, а всё бестолку...
Нет, нету такой функции, только самому делать
1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
22.06.2020, 20:52  [ТС]
Я так и понял.
Уже накопипастил switch - т.к. не охота в некоторых файлах/функциях привязываться к борландовским либам...

Получилось это:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
std::wstring getVTypeString(enum VARENUM type)
{       std::wstring      result;
    
        if((type & VT_ILLEGAL) == VT_ILLEGAL)
        {
            result = L"Illegal type";
            return result;
        }
 
        if(type & VT_VECTOR)    result += L"A simple counted array of ";
        if(type & VT_ARRAY)     result += L"SAFEARRAY pointer of ";
        if(type & VT_BYREF)     result += L"Void pointer for local use ";
 
        switch(type & varTypeMask)
        {case   VT_EMPTY:   result += L"Not specified";             break;
         case   VT_NULL:    result += L"NULL";                      break;
         case   VT_I2:      result += L"2-byte integer";            break;
         case   VT_I4:      result += L"4-byte integer";            break;
         case   VT_R4:      result += L"4-byte real";               break;
         case   VT_R8:      result += L"8-byte real";               break;
         case   VT_CY:      result += L"Currency";                  break;
         case   VT_DATE:    result += L"Date";                      break;
         case   VT_BSTR:    result += L"String";                    break;
         case   VT_DISPATCH:result += L"IDispatch pointer";         break;
         case   VT_ERROR:   result += L"SCODE value";               break;
         case   VT_BOOL:    result += L"Boolean value. True is -1 and false is 0";  break;
         case   VT_VARIANT: result += L"Variant pointer";           break;
         case   VT_UNKNOWN: result += L"IUnknown pointer";          break;
         case   VT_DECIMAL: result += L"16-byte fixed-pointer value";               break;
         case   VT_I1:      result += L"Character";                 break;
         case   VT_UI1:     result += L"Unsigned character";        break;
         case   VT_UI2:     result += L"Unsigned short";            break;
         case   VT_UI4:     result += L"Unsigned long";             break;
         case   VT_I8:      result += L"64-bit integer";            break;
         case   VT_UI8:     result += L"64-bit unsigned integer";   break;
         case   VT_INT:     result += L"Integer";                   break;
         case   VT_UINT:    result += L"Unsigned integer";          break;
         case   VT_VOID:    result += L"C-style void";              break;
         case   VT_HRESULT: result += L"HRESULT value";             break;
         case   VT_PTR:     result += L"Pointer type";              break;
         case   VT_SAFEARRAY:
                            result += L"A safe array. Use VT_ARRAY in VARIANT";     break;
         case   VT_CARRAY:  result += L"C-style array";             break;
 
         case   VT_USERDEFINED:
         case   VT_RECORD:
                            result += L"User defined type";         break;
         case   VT_LPSTR:   result += L"Null-terminated string";    break;
         case   VT_LPWSTR:  result += L"Wide Null-terminated string";               break;
         case   VT_INT_PTR: result += L"Signed machine register size width";        break;
         case   VT_UINT_PTR:result += L"Unsigned machine register size width";      break;
         case   VT_FILETIME:result += L"FILETIME value";            break;
         case   VT_BLOB:    result += L"Length-prefixed bytes";     break;
         case   VT_STREAM:  result += L"Name of the stream follows";break;
         case   VT_STORAGE: result += L"Name of the storage follows";               break;
         case   VT_STREAMED_OBJECT:
                            result += L"The stream contains an object";             break;
         case   VT_STORED_OBJECT:
                            result += L"The storage contains an object";            break;
         case   VT_BLOB_OBJECT:
                            result += L"The blob contains an object";               break;
         case   VT_CF:      result += L"Clipboard format";          break;
         case   VT_CLSID:   result += L"Class ID";                  break;
         case   VT_VERSIONED_STREAM:
                            result += L"Stream with a GUID version";break;
         case   VT_BSTR_BLOB:
                            result += L"VT_BSTR_BLOB is reserved for system use";   break;
        }
 
        return result;
}

Может кому и пригодиться...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2020, 20:52
Помогаю со студенческими работами здесь

Ошибка PHPOfice: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name
Fatal error: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name in...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например, у меня есть в определенном директории...

AsyncTask<String, String, String> объясните пожалуйста
При описаний класса наследника AsyncTask мы в угловых скобках указываем три типа данных: 1. Тип входных данных. Это данные которые пойдут...

Как использовать String.Substring(string, string)?
Есть у String метод Substring(int, int), но он принимает только числа. Я видел на видео, что можно парсить по словам. Например: string...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru