Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с VARIANT, Преобразование VARIANT в int и обратно 
V
    Опции темы
Rage
Дата 13.7.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 30.10.2006
Где: Спб

Репутация: 1
Всего: 1



  Доброго времени суток всем! Без предисловий перейду сразу к сути:
  Нужно каким-то образом получить из переменной одного из следующих типов ( int, double, bool,
  std::string)
  переменную типа VARIANT, и обратно, имея VARIANT получить int, double, и т.д.
  Я никогда не работал с VARIANT. В MSDN по этому поводу даже примеров толковых  не нашёл.
  Подскажите, пожалуйста, как выполнить такие преобразования. 
  Заранее спасибо!!! smile 
PM MAIL ICQ   Вверх
Fazil6
Дата 13.7.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



cм. comutil.h
там есть класс _variant_t - обертка для варианта.
Там все необходимые конструкторы и операторы преобразования
PM MAIL   Вверх
Rage
Дата 13.7.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 30.10.2006
Где: Спб

Репутация: 1
Всего: 1



Я бы с удовольствием воспользовался вашим советом, но мне НУЖНО(только не спрашивайте зачем) работать именно с VARIANT.
К тому же я не очень хорошо понимаю, что такое обёртка.  smile 
Мне бы посмотреть примеры конструкций, я бы разобрался.
PM MAIL ICQ   Вверх
JackYF
Дата 13.7.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Rage @  13.7.2007,  17:20 Найти цитируемый пост)
работать именно с VARIANT

а у меня тупой вопрос: что такое VARIANT? и откуда.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zkv
Дата 13.7.2007, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Rage @  13.7.2007,  17:04 Найти цитируемый пост)
В MSDN по этому поводу даже примеров толковых  не нашёл.

ну там показывать просто особо нечего.
Код

#include <iostream>
#include <windows.h>

std::ostream &operator<<( std::ostream &stream, const VARIANT &var );

int main()
{
    try
    {
        VARIANT vVar;

        vVar.vt = VT_R4;
        vVar.fltVal = 3.14f;    
        std::cout<<vVar<<'\n';

        vVar.vt = VT_BOOL;
        vVar.boolVal = true;    
        std::cout<<vVar<<'\n';

        vVar.vt = VT_BSTR;
        vVar.bstrVal = SysAllocString( L"String for test" );
        std::cout<<vVar<<'\n';
        SysFreeString( vVar.bstrVal );

        vVar.vt = VT_ARRAY;
        vVar.boolVal = true;    
        std::cout<<vVar<<'\n';
    }
    catch( const char *pcReason)
    {
        std::cout<<"We have caught exception: "<<pcReason<<'\n';
    }
    std::cout<<"Good bye! (Press <Enter>...)"<<'\n';
    std::cin.get();
}

std::ostream &operator<<( std::ostream &stream, const VARIANT &var )
{
    switch( var.vt )
    {
    case VT_R4:
        stream<<var.fltVal;
        break;
    case VT_R8:
        stream<<var.dblVal;
        break;
    case VT_BOOL:
        (var.boolVal) ? stream<<"true" : stream<<"false";
        break;
    case VT_BSTR:
        {
            int iSize = wcslen( var.bstrVal ) + 1;
            char *pcBuff = new char[ iSize ];
            WideCharToMultiByte( CP_ACP, 0, var.bstrVal, -1,
                pcBuff, iSize, NULL, NULL );
            stream<<pcBuff;
            delete []pcBuff;
            break;
        }
    default:
        throw( "Unknown type" );
    }
    return stream;
}

PM MAIL   Вверх
Rage
Дата 13.7.2007, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 30.10.2006
Где: Спб

Репутация: 1
Всего: 1



Спасибо огромное!!!!!!  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0464 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.