Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ICBa
0 / 0 / 0
Регистрация: 09.12.2008
Сообщений: 87
#1

Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив - C++

17.12.2008, 13:46. Просмотров 792. Ответов 4
Метки нет (Все метки)

Как реализовать сабж?
А то в MSDN-е что-то так закручено -пока не врубиться никак...

Цель: из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив, размерность масива заранее неизвестна.
(известна только непосредствено перед передачей данных).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2008, 13:46     Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив
Посмотрите здесь:

Двумерный массив передать через **arr C++
Передать двумерный массив в функцию C++
C++ Надо создать ActiveX control (+)
C++ Передать двумерный массив в функцию
C++ Передать двумерный массив функции
Передать двумерный массив указателей в функцию C++
На основе контейнера vector построить двумерный динамический массив C++
Как передать в функцию двумерный динамический массив? C++
Двумерный массив передать в функцию C++
Передать в функцию двумерный массив C++
C++ Как передать двумерный массив функции?
C++ Не могу передать двумерный массив в функцию

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vita
Сообщений: n/a
18.12.2008, 09:44     Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив #2
В интерфейсе
C++
1
    [id(1)] HRESULT GetData([out,retval] SAFEARRAY(BYTE) *psa);
В реализации
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
29
30
// будет передан массив, описываемый в VB так:
// Dim arr() As Byte
// arr = pBinData.GetData
STDMETHODIMP CBinData::GetData(/*[out,retval]*/ SAFEARRAY* *psa)
{
    // TODO: Add your implementation code here
 
    // будет создан массив, описываемый в VB так:
    // Dim arr() As Byte
    // ReDim arr(0 To 3, 0 To 2)
 
    // ЗАМЕТИМ, что массивы в VB расположены не так, как в C|C++
    // C|C++: [0][0] [0][1] [0][2] ...
    // VB:    [0][0] [1][0] [2][0] ...
 
    SAFEARRAYBOUND rgsabound[2] = { {4,0}, {3,0} };
 
    // создаём массив байт (VT_UI1). Если использовать другие VT_, будут массивы других типов
    if( (*psa = ::SafeArrayCreate( VT_UI1, 2, rgsabound )) == NULL )
        retrurn E_OUTOFMEMORY;
 
    char* pss;
    if( FAILED(::SafeArrayAccessData(*psa, (void**)&pss)) )
        return E_ACCESSDENIED;
 
    // заполняешь массив pss так, как тебе надо
 
    ::SafeArrayUnaccessData(*psa);
    return S_OK;
}
ICBa
0 / 0 / 0
Регистрация: 09.12.2008
Сообщений: 87
21.12.2008, 16:25  [ТС]     Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив #3
На сколько я понял это ATL ?
А в МFC как это сделать?
Надо сделать метод которому контейнер будет получать массив типа variant и создавать SafeArray.
Какой тип переменной надо указать в визарде 'Add Method' которая собственно и будет этот массив принимать?
Vita
Сообщений: n/a
21.12.2008, 19:32     Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив #4
Да, это реализация метода в ATL, но код к ATL не привязан - это WINAPI. Как это сделать в MFC, я не знаю.

ATL Визард тоже глючный и параметры типа SAFEARRAY(VARIANT) не понимает. Исправляется заданием типа SAFEARRAY* или long* с последующей заменой как нужно.

Есть два подхода - принять и вернуть массив (параметр [in,out] в IDL файле)или просто вернуть массив (параметр [out,retval] в IDL файле). И реализация у них разная что в АТЛ что в МФС.

Зайди на rsdn.ru форум МФС, может там есть решение для тебя.
ICBa
0 / 0 / 0
Регистрация: 09.12.2008
Сообщений: 87
22.12.2008, 10:31  [ТС]     Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив #5
Спасибо, буду разбираться...
Yandex
Объявления
22.12.2008, 10:31     Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив
Ответ Создать тему
Опции темы

Текущее время: 03:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru