20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2

Работа с VARIANT

21.04.2015, 08:06. Показов 1869. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
STDMETHODIMP MyClass::InitiateRequest(VARIANT* pVal)
{
    byte mac[6] = { 0x00, 0x8a, 0x0C, 0x98, 0x11, 0x15 };
    _variant_t var;
    var.vt = VT_ARRAY | VT_UI1;
 
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].cElements = 6;
    rgsabound[0].lLbound = 0;
 
    var.parray = SafeArrayCreate(VT_UI1, 1, rgsabound);
 
    void * pArrayData = NULL;
    SafeArrayAccessData(var.parray, &pArrayData);
    memcpy(pArrayData, mac, 6);
    SafeArrayUnaccessData(var.parray);
    *pVal = var;
 
    return S_OK;
}
Я пытаюсь получить данные массива mac следующим образом
C++
1
2
3
4
5
public byte[] Request()
    {
        var val = new object();
        return (byte[])_myclass.InitiateRequest(&val);
    }
Подчеркивает строку "return (byte[])_myclass.InitiateRequest(&val);", говорит "No overload for method 'InitiateRequest' takes 1 arguments".
Еще смущает, как я объявил переменную "var val".
Подскажите пожалуйста, что я не так делаю?
Спасибо.

Добавлено через 20 часов 44 минуты
Я удалил 17ю строку и все заработало. Подскажите пожалуйста, как в адрес *pVal передать значения?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2015, 08:06
Ответы с готовыми решениями:

Работа с типом данных VARIANT
Всем привет. Сейчас работаю с некоторой динамической библиотекой(*.dll). Пытаюсь из этой dll использовать некую функцию GetTitleIDList....

Работа с полями Variant
Доброй ночи. Такой вопрос. Есть поле в Excel типа Variant, в нем находится изображение. Как выгрузить из Excel данные я знаю. Как...

Работа с byte (Помещение а Variant)
Добрый день. В C# массив байт и переменная типа байт создаются так:byte data1 = {0x01, 0x02}; byte data2 = 0x22. Я эти значения могу...

3
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,449
21.04.2015, 09:37
Цитата Сообщение от Костяныч Посмотреть сообщение
Подскажите пожалуйста, как в адрес *pVal передать значения?
зачем вам _variant_t var - делайте все сразу в pVal
1
20 / 20 / 4
Регистрация: 31.10.2010
Сообщений: 1,240
Записей в блоге: 2
21.04.2015, 11:04  [ТС]
vxg, дело в том, что в конwе мне необходимо проделать следующее "*pVal = var.Detach();".
Если без _variant_t, то как?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,449
21.04.2015, 11:57
Лучший ответ Сообщение было отмечено Костяныч как решение

Решение

Цитата Сообщение от Костяныч Посмотреть сообщение
дело в том, что в конwе мне необходимо проделать следующее "*pVal = var.Detach();"
зачем вам Detach если вы будете работать с pVal - в нем уже будут нужные вам данные
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
STDMETHODIMP MyClass::InitiateRequest(VARIANT* pVal)
{
    byte mac[6] = { 0x00, 0x8a, 0x0C, 0x98, 0x11, 0x15 };
 
    SAFEARRAYBOUND bounds[1] = {{0, 5}};
 
    SAFEARRAY *sa = SafeArrayCreate(VT_UI1, 1, bounds);
 
    long indexes[1] = {0};
 
    VARIANT v;
    VariantInit(&v);
    V_VT(&v) = VT_UI1;
 
    for (unsigned i = 0; i < 6; i++)
    {
        V_UI1(&v) = mac[i];
        SafeArrayPutElement(sa, indexes, &v);
        indexes[0]++;
    }
 
    VariantClear(&v);
 
    V_VT(pVal) = VT_ARRAY | VT_UI1;
    V_ARRAY(pVal) = sa;
 
    return S_OK;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2015, 11:57
Помогаю со студенческими работами здесь

Variant в DLL
Добрый день. Пытаюсь использовать переменные типа Variant в коде DLL и при компиляции получаю ошибку типа: Error: Unresolved external...

VARIANT array в C#
C# windows form В подключенном в references модуле метод возвращает &quot;VARIANT array of 17 VARIANTs&quot; (в описании так). В студии...

Тип variant
Здравствуйте,уважаемые форумчане.У меня возник вопрос, как задать переменную у которой тип будет variant, вариантами значений которой будут...

boost Variant
Компилятор ругается что типа не может найти копи констрактор... но я его его вроде как внедрил... что я сделал не так ? Заранее огромное...

Из Variant в String
Доброго времени суток. Не уверен - в ту ли тему пишу, ибо с проблемой столкнулся в Pascal Script...если что не так - извиняйте уж. В...


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

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

Новые блоги и статьи
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 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru