Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Массивы VB Visual C++

2.5K
17 января 2005 года
Akula
38 / / 17.01.2005
Привет.
Хочу написать DLL-ку на VC++, в которой бы изменялся размер массива, переданный как параметр функции на VB (через Declares).
Подскажите как это сделать.
С уважением Akula
533
25 января 2005 года
Visualex
254 / / 07.01.2005
Цитата:
Originally posted by Akula
Привет.
Хочу написать DLL-ку на VC++, в которой бы изменялся размер массива, переданный как параметр функции на VB (через Declares).
Подскажите как это сделать.
С уважением Akula


Непонятен вопрос... Что ты хочешь?? Либо написать dll-ку неполучается, либо функцию которая определяет размер массива.

7.5K
25 января 2005 года
Fialka
36 / / 10.01.2005
А если вектор использовать, а не массив?
2.5K
25 января 2005 года
Akula
38 / / 17.01.2005
Я хочу что-бы в мою DLL, передавали массив из VB, а моя DLL - увеличивала размер массива, заполняла этот массив, а потом возвращала обратно в VB.
7.5K
25 января 2005 года
Fialka
36 / / 10.01.2005
Цитата:
Originally posted by Akula
Я хочу что-бы в мою DLL, передавали массив из VB, а моя DLL - увеличивала размер массива, заполняла этот массив, а потом возвращала обратно в VB.


Сделай указатель на тип.
например: int* mas;
работаешь как с массивом, т.е. заполняешь его с помощью: mas=25;
Cоответственно проблема с расмерами массива отпадает сама собой.
Только надо оно тебе? Следить же надо за памятью, не забыть почистить ее, следить, чтобы указатель в какое-нить ненужное место не залез?
Слушай, ведь вектор этот тот же массив, только не встроенный, а из STL, он сам расширяется когда надо, с любыми типами работает, с паматью сам разберается, а с помощью итераторов бегать по нему можно. Самое то. К тому же если именно ТЫ ХОЧЕШЬ и не стоит ЗАДАЧИ...

Кстати, в связи с этим вопрос:

 
Код:
int mas[10];
int *massive;

Не могли бы профи объяснить в чем разница?
Ну конечно не считая того, что в первой строчке выделили 10 элементов, а во второй строчке можно сколько угодно.
Но по сути ведь массив - это тоже указатель на int! И если бежать по массиву, то тоже можно перескакать и куда-нить не туда вылезти.
И что же лучше, если выбирать?

368
26 января 2005 года
rostyslav
629 / / 13.07.2004
Если хочешь менять размерность массива, то нужно бы передать не указатель на массив, а указатель на этот указатель.
Но все равно, код может не сработать. Скорей всего массив в VB, это не только участок памяти, но и некоторая структура.
Вроде есть в VB ReDim.

Нужно бы или передать вместе с массивом и указатель на ф-ию из основной программы, которая всего навсего изменяет размерность массива, и вызвать его из своего dll.

Или сделать это в две фазы. Сперва сообщить основной программе, массив какого размера нужна, и во второй фазе прога передала бы массив нужного размера.

Или спросить совет на ветке Visual Basic.
259
26 января 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Fialka

Сделай указатель на тип.
например: int* mas;
работаешь как с массивом, т.е. заполняешь его с помощью: mas=25;
Cоответственно проблема с расмерами массива отпадает сама собой.
Только надо оно тебе? Следить же надо за памятью, не забыть почистить ее, следить, чтобы указатель в какое-нить ненужное место не залез?
Слушай, ведь вектор этот тот же массив, только не встроенный, а из STL, он сам расширяется когда надо, с любыми типами работает, с паматью сам разберается, а с помощью итераторов бегать по нему можно. Самое то. К тому же если именно ТЫ ХОЧЕШЬ и не стоит ЗАДАЧИ...

Кстати, в связи с этим вопрос:
 
Код:
int mas[10];
int *massive;

Не могли бы профи объяснить в чем разница?
Ну конечно не считая того, что в первой строчке выделили 10 элементов, а во второй строчке можно сколько угодно.
Но по сути ведь массив - это тоже указатель на int! И если бежать по массиву, то тоже можно перескакать и куда-нить не туда вылезти.
И что же лучше, если выбирать?


1.int mas[10] - резервирует память под 10 элементов типа int и mas = адрес первого элемента.
2.int* massive - резервирует память под адрес, которуй будет указывать на поле памяти, в котором храниться переменная типа int.
т.е. mas можно рассматривать как int* mas, а для того чтобы massive[1] имело смысло нужно сначала отвести память для элемента int* massive = new int[10]; вот теперь mas и massive одно и то-же.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог