powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Торможу - в контроле нельзя использовать TYPE ???
16 сообщений из 16, страница 1 из 1
Торможу - в контроле нельзя использовать TYPE ???
    #33755150
sysadm2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33755251
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как описан Relation? Как Object? Либо описывай, не как Object, чтобы не было late binding, либо тип описывай в public-классе (что возможно только в проекте соответствующего вида, например, ActiveX DLL). По-видимому, так надо понимать сообщение об ошибке. В общем, логичное требование.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33755290
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или попробуй сделать тип классом.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33755557
sysadm2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас просто как Collection.
Соответсвенно при инициализации контрола в Run-Time - Dim Relation as NEW Collection.
Ну как вариант можно конечно и классом сделать.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33755911
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, тогда либо сделать тип классом, либо сделать свой класс-коллекцию, работающий именно с этим типом.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33756103
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в public процедуре или функции использовать private type, enum, etc. нельзя.
либо делать процедуру личной, либо тип публичным.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33756368
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aklin,
здесь другая ситуация - см. скриншот.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33757270
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в коллекцию нельзя добавть переменную Type тут ни причем. Можно объект или строку.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33757678
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffА в коллекцию нельзя добавть переменную Type тут ни причем. Можно объект или строку.
переменную можно. но только variant, а в него сконвертировать Type-переменную, объявленную в непаблик модуле - нельзя.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33757695
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff,
можно, если тип описан как Public Type в классе с Instancing=2 (PublicNotCreatable) или больше.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33757750
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедиктможно, если тип описан как Public Type в классе с Instancing=2 (PublicNotCreatable) или больше.А вот это - поподробней если можно.
А то что-то не слышал я чтобы в VB6 был боксинг переменных.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33757868
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff,
1) Запускаем VB6.
2) Создаём проект типа ActiveX DLL. Проект уже содержит класс Class1 с Instancing=5 (MultiUse).
3) В модуле класса Class1 пишем:
Код: plaintext
1.
2.
3.
Public Type TMyType
   i As Long
   s As String
End Type
4) Добавляем в группу проектов обычный проект - Меню:File\Add Project...\Standard Exe.
5) Делаем вновь созданный проект Project2 стартовым - в Project Explorer правый щелчок на Project2, Контекстное Меню:Set As Start Up.
6) Делаем ссылку в Project2 на Project1 - Меню:Project\References..., ставим галочку на Project1 (5-я строка).
7) Рисуем на Form1 кнопку, пишем обработчик нажатия:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Command1_Click()
 Dim c As New Collection
 Dim a As TMyType
 Dim b As TMyType
 Dim i As Long
 
 a.i =  111 
 a.s = "первый"
 b.i =  222 
 b.s = "второй"
 c.Add a
 c.Add b
 
 AutoRedraw = True
 Cls
 For i =  1  To c.Count
    Print "[" & i & "]: i=" & c(i).i & ", s=""" & c(i).s & """"
 Next i
End Sub
8) Запускаем Project2 на выполнение (F5), жмём кнопку Command1.


Если откомпилировать Project1, в IDL тип TMyType выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    typedef [uuid(FD0E40BF-5F75-45B4-8A1A-AD2C22A4B486), version( 1 . 0 )]
    struct tagTMyType {
        [helpstring("i")        
]
        long i;
        [helpstring("s")        
]
        BSTR s;
    } TMyType;
В h так:
Код: plaintext
1.
2.
3.
4.
typedef /* [version][uuid] */ struct  tagTMyType
    {
    /* [helpstring] */ long i;
    /* [helpstring] */ BSTR s;
    }	TMyType;
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33757941
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бенедикт
Я подозревал что Type может в структуру скомпилироваться. Иногда, не понятно когда.
Да. В C++ структура - то же ссылочный тип. Поэтому его положить в коллекцию можно.
Но, в рамках dll, по-моему лучше класс написать. Лишний файл, но работать - проще.
Мне бы интересно было типами пользоваться лишь для уменьшения количества файлов в проекте.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33758492
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff,
Переменные UDT всегда структуры (с точки зрения C; в этом можно убедиться с помощью LSet или CopyMemory). Про структуру в C++, ccылочный тип и помещение в коллекцию не понял. В коллекцию можно и переменную типа Long положить, с тем же успехом, что переменную UDT - в коллекции будет храниться, с точки зрения программиста на VB, копия переменной, в отличие от ситуации с классом (хранится ссылка). Как это внутри коллекции хранится - её дело, но поскольку Add принимает, а Item возвращает Variant, то логично предположить, что хранится в виде Variant. Можно ли операции преобразования из UDT в Variant и обратно называть boxing и unboxing - не уверен.
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33763522
sysadm2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порадовал Бенедикт с IL. Спасибо.

Еще предложу рабоче-крестьянское решение боксинга:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Dim Relation As New Collection  
.....
Relation.Add (CStr(grTop_RowId) & ":" & CStr(grLeft_RowId))
....
Dim i As Long
For i =  1  To Relation.Count
If CStr(grTop_RowId) & ":" & CStr(grLeft_RowId) = Relation(i) Then
    Relation.Remove (i)
    Exit For
    End If
Next i
....
Dim i As Long, Y() As String
For i =  1  To Relation.Count
    Y = Split(Relation(i), ":")
    If Y( 1 ) = RowIndex Then
        ...
        Exit Sub
    End If
Next i
...
Рейтинг: 0 / 0
Торможу - в контроле нельзя использовать TYPE ???
    #33772825
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysadm2000Еще предложу рабоче-крестьянское решение боксинга
Чем-то вроде 1С повеяло... "Правильный" рабоче-крестьянское "боксинг" двух Long-ов - в Currency:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Type RelationItem
   Top As Long
   Right As Long
End Type

Private Type RelationItemCcy
   Value As Currency
End Type

Public Function BoxRelationItem(RI As RelationItem) As Currency
 Dim c As RelationItemCcy
 LSet c = RI
 BoxRelationItem = c.Value
End Function

Public Function UnboxRelationItem(BoxedVal As Currency) As RelationItem
 Dim RI As RelationItem
 Dim c As RelationItemCcy
 c.Value = BoxedVal
 LSet RI = c
 UnboxRelationItem = RI
End Function
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Торможу - в контроле нельзя использовать TYPE ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]