Форум программистов, компьютерный форум, киберфорум
C++: COM, OLE, ActiveX
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
425 / 296 / 97
Регистрация: 02.10.2008
Сообщений: 1,139
Записей в блоге: 1
1

VARENUM to String

22.06.2020, 19:57. Просмотров 1891. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2020, 19:57
Ответы с готовыми решениями:

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

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

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population....

Ошибка 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...

2
5855 / 3984 / 1635
Регистрация: 07.05.2019
Сообщений: 12,374
Записей в блоге: 1
22.06.2020, 20:41 2
Лучший ответ Сообщение было отмечено drfaust как решение

Решение

Цитата Сообщение от drfaust Посмотреть сообщение
Может есть стандартная WinAPIшная функция, способная дать текстовое описание VARTYPE ? Гуглю, а всё бестолку...
Нет, нету такой функции, только самому делать
1
425 / 296 / 97
Регистрация: 02.10.2008
Сообщений: 1,139
Записей в блоге: 1
22.06.2020, 20:52  [ТС] 3
Я так и понял.
Уже накопипастил 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2020, 20:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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

Как string присвоить String? И как из string перевести в char[]?
Как string присвоить String? И как из string перевести в char?

Too few parameters in call to 'Lechebnica::AddNewElement(int,int,string,string,int,string)
Edit1 Id Edit2 Имя Edit3 Фамилия Edit4 Номер телефона ComboBox1 Услуга ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.