crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QVariant -> COM VARIANT
shdevlp
  опции профиля:
сообщение 8.11.2011, 13:11
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 8.11.2011
Пользователь №: 2986

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте коллеги, помогите разобраться в сложном для меня вопросе — есть сгенеренный
утилитой dumpcpp класс из tlb файла, из которого мне нужно использовать функцию следующего вида:

inline uint RSystem::GetInfo(const QVariant& varInfo);

в Оригинале эта функция выглядит так:

HRESULT GetInfo(VARIANT varInfo);

более того для вызова этой функции varInfo надо подготовить таким образом:

INFO data[16];
VariantInit(&varInfo);

varInfo.vt = VT_BYREF|VT_UI1;
varInfo.pbVal = (BYTE *)&data;

Т.е. нужно каким то образом правильно преобразовать VARIANT в QVariant.

Кто знаком с данным вопросом, куда копать? Может есть готовые решения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 8.11.2011, 13:41
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


сильно сомневаюсь, что прямое преобразование возможно. Наверное, можно только "вручную" скопировать нужные поля из одной переменной в другую
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 8.11.2011, 15:37
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Цитата(shdevlp @ 8.11.2011, 14:11) *
Кто знаком с данным вопросом, куда копать? Может есть готовые решения?


Готовых решений,я думаю, нет.
Здесь нужно аккуратно сопоставить типы VARIANT с типами QVariant.
Встроенные типы QVariant находятся в перечислителе QVariant::Type.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 8.11.2011, 17:32
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


А регистрация нового типа через Q_DECLARE_METATYPE не подходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
shdevlp
  опции профиля:
сообщение 8.11.2011, 22:39
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 8.11.2011
Пользователь №: 2986

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(sidsukana @ 8.11.2011, 17:32) *
А регистрация нового типа через Q_DECLARE_METATYPE не подходит?


пробывал, не подходит - компилируется - но падает на этапе выполнения

Цитата(ssoft @ 8.11.2011, 15:37) *
Цитата(shdevlp @ 8.11.2011, 14:11) *
Кто знаком с данным вопросом, куда копать? Может есть готовые решения?


Готовых решений,я думаю, нет.
Здесь нужно аккуратно сопоставить типы VARIANT с типами QVariant.
Встроенные типы QVariant находятся в перечислителе QVariant::Type.


помогите сопоставить вручную.
входной параметр в функцию VARIANT varInfo

INFO data[16];
VariantInit(&varInfo);

varInfo.vt = VT_BYREF|VT_UI1;
varInfo.pbVal = (BYTE *)&data;

Нашел описание в VARIANT

VT_BYREF | VT_UI1 - соответствует BYTE * pbVal;

в enum QVariant::Type я не нашел подобия BYTE * (( может использовать QVariant::Type = QByteArray?

Цитата(shdevlp @ 8.11.2011, 22:31) *
Цитата(sidsukana @ 8.11.2011, 17:32) *
А регистрация нового типа через Q_DECLARE_METATYPE не подходит?


пробывал, не подходит - компилируется - но падает на этапе выполнения

Цитата(ssoft @ 8.11.2011, 15:37) *
Цитата(shdevlp @ 8.11.2011, 14:11) *
Кто знаком с данным вопросом, куда копать? Может есть готовые решения?


Готовых решений,я думаю, нет.
Здесь нужно аккуратно сопоставить типы VARIANT с типами QVariant.
Встроенные типы QVariant находятся в перечислителе QVariant::Type.


помогите сопоставить вручную.
входной параметр в функцию VARIANT varInfo

INFO data[16];
VariantInit(&varInfo);

varInfo.vt = VT_BYREF|VT_UI1;
varInfo.pbVal = (BYTE *)&data;

Нашел описание в VARIANT

VT_BYREF | VT_UI1 - соответствует BYTE * pbVal;

в enum QVariant::Type я не нашел подобия BYTE * (( может использовать QVariant::Type = QByteArray?


Слабо представляю что должно быть в памяти вместо переменной VARIANT при вызове этой функции


Цитата
Цитата(sidsukana @ 8.11.2011, 17:32) *
А регистрация нового типа через Q_DECLARE_METATYPE не подходит?


пробывал, не подходит - компилируется - но падает на этапе выполнения

Цитата(ssoft @ 8.11.2011, 15:37) *
Кто знаком с данным вопросом, куда копать? Может есть готовые решения?


Готовых решений,я думаю, нет.
Здесь нужно аккуратно сопоставить типы VARIANT с типами QVariant.
Встроенные типы QVariant находятся в перечислителе QVariant::Type.


помогите сопоставить вручную.
входной параметр в функцию VARIANT varInfo

INFO data[16];
VariantInit(&varInfo);

varInfo.vt = VT_BYREF|VT_UI1;
varInfo.pbVal = (BYTE *)&data;

Нашел описание в VARIANT

VT_BYREF | VT_UI1 - соответствует BYTE * pbVal;

в enum QVariant::Type я не нашел подобия BYTE * (( может использовать QVariant::Type = QByteArray?

Слабо представляю что должно быть в памяти вместо переменной VARIANT при вызове этой функции

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 8.11.2011, 23:17
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


На этапе выполнения? Поподробней.
Вот я делал

struct uarray2
{
    quint32 value[2];
};

Q_DECLARE_METATYPE(uarray2);

QVariant myvalue = getfrom(...);

uarray2 var = myvalue.value<uarray2>();


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
shdevlp
  опции профиля:
сообщение 9.11.2011, 8:49
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 3
Регистрация: 8.11.2011
Пользователь №: 2986

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(sidsukana @ 8.11.2011, 23:17) *
На этапе выполнения? Поподробней.
Вот я делал

struct uarray2
{
    quint32 value[2];
};

Q_DECLARE_METATYPE(uarray2);

QVariant myvalue = getfrom(...);

uarray2 var = myvalue.value<uarray2>();


так же делал, только перед присвоением есть еще проверка myVal.canConvert<Type>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 8:24