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

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

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

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

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

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

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

На основе контейнера vector построить двумерный динамический массив - C++
Каким образом можно один двумерный массив скопировать в другой?С помощью copy() не получается На основе контейнера vector построить...

Двумерный массив передать в функцию - C++
Нужно просто вывести двумерный массив с помощью функций. Вот что я написал: #include <iostream> #include <conio.h> #include...

Передать в функцию двумерный массив - C++
void polecln(char *pole,int N,int M) { for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { pole = ' ';...

Передать двумерный массив функции - C++
Скажите, пожалуйста, как я могу передать двумерный массив функции, которая с ним поработает, а потом вернет мне его? int...

Передать двумерный массив в функцию - C++
подскажи те как передать двумерный массив в функцию?)

Передать двумерный массив в функцию - C++
Доброе утро! Подскажите пожалуйста как можно передать двумерный массив из функции в main(). к примеру функция dataFromFile() в ней...

4
Vita
Сообщений: n/a
18.12.2008, 09:44 #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  [ТС] #3
На сколько я понял это ATL ?
А в МFC как это сделать?
Надо сделать метод которому контейнер будет получать массив типа variant и создавать SafeArray.
Какой тип переменной надо указать в визарде 'Add Method' которая собственно и будет этот массив принимать?
0
Vita
Сообщений: n/a
21.12.2008, 19:32 #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  [ТС] #5
Спасибо, буду разбираться...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2008, 10:31
Привет! Вот еще темы с ответами:

Двумерный массив передать через **arr - C++
Добрый день. Поискал похожие темы, кое-что нашел, но у меня проблема в том, что мне нужно передать уже созданный двумерный массив int arr...

Передать двумерный массив указателей в функцию - C++
Здравствуйте) У меня есть класс Tile и структура Room. Примерно они выглядят таким образом: class Tile { private: ...

Как передать двумерный массив функции? - C++
Уважаемые форумчане, подскажите пожалуйста как передать двумерный массив в функцию? Как то самому не получается разобраться.... Заранее...

Не могу передать двумерный массив в функцию - C++
Мне нужно взять имеющийся двумерный массив передать его в функцию, преобразовать и вернуть обратно. Вот код: #include <iostream> ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
22.12.2008, 10:31
Ответ Создать тему
Опции темы

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