Еще один вопрос по с++

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Еще один вопрос по с++

Сообщение d3drm » 09.05.2005 (Пн) 2:01

у меня есть какая-то структура, допустим называется MYSTRUCT, как мне из функции возвратить массив данного типа?
ХЎ

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 09.05.2005 (Пн) 2:25

Может, передавать в функцию указатель на него(массив)? Тогда возвращать не придется.....
Последний раз редактировалось Ariman 09.05.2005 (Пн) 2:33, всего редактировалось 2 раз(а).

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 09.05.2005 (Пн) 2:31

А можно и так:

MYSTRUCT *MyFunc()
{
MYSTRUCT st[1024];
//................
return st;
}

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.05.2005 (Пн) 3:32

Шо, опять возвращаем указатели на локальные переменные? :)

Объявляем функцию как указатель, в ней отводим память через new, оную возвращаем.
Потом вызывающий юзает delete[] :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 09.05.2005 (Пн) 3:40

GSerg
Тьфу, блин, точно.... :oops: Хотел написать MYSTRUCT *st=new MYSTRUCT[1024];
Прошу прощения......

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 09.05.2005 (Пн) 3:45

GSerg писал(а):Объявляем функцию как указатель

В смысле, тип возвращаемого значения - указатель на структуру, ты это имеешь в виду?
MYSTRUCT *MyFunc()

А то слова "Функцию как указатель" у меня ассоциируются с указателем на функцию :wink:

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 09.05.2005 (Пн) 10:32

Я попробовал так:

int MyFunc(MYSTRUCT *RetVal)
{
RetVal = new MYSTRUCT[1000];
// заполнение массива
return 0;
}

Эта функция лежит в DLL как API и вызываю я ее так:

Public Declare Function MyFunc Lib "dllapi.dll" ( ByRef retVal() As MYSTRUCT) As Long

Я точно знаю, что массив должен быть заполнен, но все его элементы - нулевые! Кто-нибудь объяснит почиму?
ХЎ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.05.2005 (Пн) 10:37

Он точно знает...
Он знает точно! :)
Но об отличиях массивов как таковых от SAFEARRAY он даже не подозревает :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 09.05.2005 (Пн) 10:41

GSerg, расскажи! :shock:
ХЎ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.05.2005 (Пн) 10:49

Поверь мне, рассказывать долго :)
Поищи на vbstreets мою статью про SAFEARRAY (хотя там и несколько про другое), а вообще - MSDN, все функции с именами SafeArray*.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 09.05.2005 (Пн) 11:37

GSerg, хотя бы в двух словах, чтобы я хотя бы знал что я ищу. Что это такое? Для чего это нужно?
ХЎ

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 09.05.2005 (Пн) 12:17

d3drm
А зачем у тебя в функции под него память выделяется? Раз уж решил передавать в нее массив - так и сделай в функции только заполнение!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 09.05.2005 (Пн) 12:33

Ariman, убрал, но все равно не работает...
ХЎ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.05.2005 (Пн) 14:50

В двух словах: все массивы в VB SAFEARRAY, а в C++ нет :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.05.2005 (Пн) 14:52

d3drm, передавай из VB ByRef-ом первый элемент массива, и будет тебе Щастье.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.05.2005 (Пн) 14:53

GSerg писал(а):В двух словах: все массивы в VB SAFEARRAY, а в C++ нет :)

Не все. Массивы в UDT - не SAFEARRAY ;-)
Изображение

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 09.05.2005 (Пн) 16:04

нету мне счастия, ругается при передаче первого элемента. говорит мол Array or user defined type expected...
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.05.2005 (Вт) 9:19

d3drm писал(а):нету мне счастия, ругается при передаче первого элемента. говорит мол Array or user defined type expected...

Дак ты и переобъяви, чтобы принимало один элемент.
А в Сях оставь MYSTRUCT *RetVal.
Изображение


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList