Про позднее связывание.

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

Про позднее связывание.

Сообщение Mikle » 13.06.2004 (Вс) 19:17

Насколько знаю, писать так:

DIM d3dx AS D3DX8
...
Set d3dx = New D3DX8

не совсем правильно, будут медленнее обращения, лучше так:

Dim d3dx As New D3DX8

Не будет ли позднее связывание, если объект, объявлен как:

Dim d3dx As New D3DX8
в модуле №1, и:
DIM d3dx AS D3DX8
в модуле №2

в одном модуле, передается в другой, как параметр ?

Код в модуле №2:
...
Sub ...... (d as d3dx8)
set d3dx=d
End Sub

То есть я хочу, чтобы множество модулей (классов) пользовались одним объектов, но не хочу делать его Public, чтобы классы были максимально автономны и не требовали от основной программы никаких специальных переменных или объектов. Не потеряю ли я раннее связывание?

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

Сообщение GSerg » 14.06.2004 (Пн) 10:03

Раннее связывание ты потеряешь только если отключишь tlb и все переменные объявишь как object.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.06.2004 (Пн) 10:14

Благодарю. Поясни, пожалуйста, что значит "отключишь tlb"?

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

Сообщение GSerg » 14.06.2004 (Пн) 10:18

Project :arrow: References :arrow: DirectX 8.0 for Visual Basic Type Library :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.06.2004 (Пн) 18:38

... всего лишь... ну это не грозит :wink:

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Re: Про позднее связывание.

Сообщение Leon_ » 15.06.2004 (Вт) 10:22

Mikle писал(а):Насколько знаю, писать так:
DIM d3dx AS D3DX8
...
Set d3dx = New D3DX8

не совсем правильно, будут медленнее обращения, лучше так:

Dim d3dx As New D3DX8

Извините, что цепляюсь к словам, да и не совсем по теме..

Разбираясь c ADO в одной статейке (Chapter 6: ActiveX Data Objects
Ken Getz, Paul Litwin, Mike Gilbert SYBEX Inc.) усвоил обратное утверждение. Диаметрально противоположное. :roll:
Там по этому вопросу утверждают
We recommend that you never use the shortcut of skipping the explicit Set statement. Yes, you save a single line of code, but you pay for it with every other line of code running a tiny bit slower.

Кому верить?

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

Сообщение alibek » 15.06.2004 (Вт) 10:25

Не знаю. Я всегда пишу в две строки.
Во-всяком случае это больше соответствует логике, Dim (Private, Public) просто создает переменную, а Set ... = New и Set ... = Nothing создают и уничтожают экземпляр.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение GSerg » 15.06.2004 (Вт) 10:34

По идее, объявление new предполагает, что объект вечен. То есть если мы его занафингуем, а потом снова обратимся к этой переменной, VB создаст (создаст, создаст) новый экземпляр, только нам не скажет.
Так что должен быть внутренний механизм проверки на нафинг. Значит, должно работать медленнее :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 15.06.2004 (Вт) 10:41

Да... видимо нужно тест написать - и проверить.
Тут еще вопрос. Если я уничтожаю объект там, где создавал, нужно ли уничтожать предварительно в модуле, куда он был передан параметром и ассоциирован с объектной переменной? Вообще, как проверить, остался ли мусор за программой?

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 15.06.2004 (Вт) 10:54

Если объектн. переменная была передана "по ссылке" (ByRef) то не нужно. Если "по значению" (ByVal), то это уже два экземпляра, и нужно уничтожать обоих.

Уничтожжать их всех :lol:

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

Сообщение GSerg » 15.06.2004 (Вт) 11:19

Если он был передан и запомнен в переменной уровня модуля - да, нужно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 15.06.2004 (Вт) 13:48

Да, именно в переменной уровня модуля. То, что Dinamic переменные процедур уничтожатся сами - это понятно.


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 61

    TopList