Создание собственного типа данных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Создание собственного типа данных

Сообщение mar_val » 11.09.2005 (Вс) 19:30

Объявляю в проекте собственный тип данных:
Код: Выделить всё
Public Type objParameter
    Name As String
    Value As Variant
End Type

Объявлется он в отдельном модуле (xxx.bas)
А в модуле класса (yyy.cls) пытаюсь использовать объявленный выше тип - создаю переменную этого типа и пытаюсь записать её в массив Variant-ов. При выполнении выдается ошибка
Compiler error:

Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions


Вопрос: Как быть? Можно ли не изменяя тип массива в объявлении, всё-таки сделать то, что я пытаюсь?

Заранее извиняюсь, быть может вопрос из разряда "Читайте книжки", но увы, нигде не могу найти толковую книгу по VB 6.0. Если возможно, дайте ссылку на книжку.

_Brodyaga
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 104
Зарегистрирован: 11.09.2005 (Вс) 11:14
Откуда: Казахстан 70х83

Сообщение _Brodyaga » 11.09.2005 (Вс) 20:03

Насчет книжки согласен, все в инете книги по VB 3.0<=
Код: Выделить всё
Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions

Скорее всего это из-за Public в типе...а лучше Private.
Счастливых программистов очень мало на свете...

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 12.09.2005 (Пн) 8:23

_Brodyaga
Private не получится использовать во всех формах/классах проекта, а мне это нужно.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 12.09.2005 (Пн) 9:33

mar_val
Из кода форм и модулей всё как раз прекрасно получается и не выдается ошибок. Хочешь чтобы и из классов было можно было объявлять попробуй вариант заменить на чтонибудь другое :roll:
Если всё делать своими ручками, они скоро отвалятся !

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.09.2005 (Пн) 11:08

дело в том, что таким образом можно использовать свой собственный тип только если он экспортируется из ActiveX DLL. Создай ActiveX DLL, помести в нее нужный тебе тип, а затем юзай его сколько тебе угодно
Весь мир матрица, а мы в нем потоки байтов!

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 13.09.2005 (Вт) 8:58

!Viper!
А как ещё можно использовать собственный тип данных? Для одного типа данных создавать ActiveX DLL не хочется...

Kovu
А на что заменить Variant? Пробовал объявлять вышеописанный массив собственным типом - та же ошибка выдается.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2005 (Вт) 9:06

Используй не типы, а классы.
Lasciate ogni speranza, voi ch'entrate.

mar_val
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 26.08.2005 (Пт) 21:32

Сообщение mar_val » 13.09.2005 (Вт) 9:22

alibek
Разумно! Спасибо!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 13.09.2005 (Вт) 10:46

Ну если для одного типа не писать отдельную DLL (что собственно действительно нелогично), то стоит наверное использовать массив именно твоего типа, а не Variant. Или действительно класс вместо UDT
Весь мир матрица, а мы в нем потоки байтов!

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

Сообщение d3drm » 13.09.2005 (Вт) 21:46

alibek писал(а):Используй не типы, а классы.


а может лучше класс yyy.cls заменить на обыкновенный модуль? Если это возможно, конечно.
ХЎ

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.09.2005 (Ср) 11:08

[quote="d3drmа может лучше класс yyy.cls заменить на обыкновенный модуль? Если это возможно, конечно.[/quote]

А в данном случае это фиолетово. Там проблема в том, что производится попытка впихнуть UDT в Variant. А VB ентого не переносит
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 79

    TopList