Массивы VB Visual C++
Хочу написать DLL-ку на VC++, в которой бы изменялся размер массива, переданный как параметр функции на VB (через Declares).
Подскажите как это сделать.
С уважением Akula
Привет.
Хочу написать DLL-ку на VC++, в которой бы изменялся размер массива, переданный как параметр функции на VB (через Declares).
Подскажите как это сделать.
С уважением Akula
Непонятен вопрос... Что ты хочешь?? Либо написать dll-ку неполучается, либо функцию которая определяет размер массива.
Я хочу что-бы в мою DLL, передавали массив из VB, а моя DLL - увеличивала размер массива, заполняла этот массив, а потом возвращала обратно в VB.
Сделай указатель на тип.
например: int* mas;
работаешь как с массивом, т.е. заполняешь его с помощью: mas=25;
Cоответственно проблема с расмерами массива отпадает сама собой.
Только надо оно тебе? Следить же надо за памятью, не забыть почистить ее, следить, чтобы указатель в какое-нить ненужное место не залез?
Слушай, ведь вектор этот тот же массив, только не встроенный, а из STL, он сам расширяется когда надо, с любыми типами работает, с паматью сам разберается, а с помощью итераторов бегать по нему можно. Самое то. К тому же если именно ТЫ ХОЧЕШЬ и не стоит ЗАДАЧИ...
Кстати, в связи с этим вопрос:
int *massive;
Не могли бы профи объяснить в чем разница?
Ну конечно не считая того, что в первой строчке выделили 10 элементов, а во второй строчке можно сколько угодно.
Но по сути ведь массив - это тоже указатель на int! И если бежать по массиву, то тоже можно перескакать и куда-нить не туда вылезти.
И что же лучше, если выбирать?
Но все равно, код может не сработать. Скорей всего массив в VB, это не только участок памяти, но и некоторая структура.
Вроде есть в VB ReDim.
Нужно бы или передать вместе с массивом и указатель на ф-ию из основной программы, которая всего навсего изменяет размерность массива, и вызвать его из своего dll.
Или сделать это в две фазы. Сперва сообщить основной программе, массив какого размера нужна, и во второй фазе прога передала бы массив нужного размера.
Или спросить совет на ветке Visual Basic.
Сделай указатель на тип.
например: int* mas;
работаешь как с массивом, т.е. заполняешь его с помощью: mas=25;
Cоответственно проблема с расмерами массива отпадает сама собой.
Только надо оно тебе? Следить же надо за памятью, не забыть почистить ее, следить, чтобы указатель в какое-нить ненужное место не залез?
Слушай, ведь вектор этот тот же массив, только не встроенный, а из STL, он сам расширяется когда надо, с любыми типами работает, с паматью сам разберается, а с помощью итераторов бегать по нему можно. Самое то. К тому же если именно ТЫ ХОЧЕШЬ и не стоит ЗАДАЧИ...
Кстати, в связи с этим вопрос:
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 одно и то-же.