Проверка объекта на валидность

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

Проверка объекта на валидность

Сообщение AHTOXA » 18.03.2004 (Чт) 13:58

Такой вопрос:
Есть некий класс C1:

dim c_one as C1

если мы теперь обратимся к методам или свойствам данного класса получим ошибку. Как проверить класс на nothing ?
Bandit

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 18.03.2004 (Чт) 14:13

Для сравнения ссылок есть оператор Is

If Not c_one Is Nothing then
c_one.AMethod
end if
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 18.03.2004 (Чт) 14:23

Век живи, век учись - как все однако было просто :). Спасибо за своевременный ответ :)
Bandit

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 18.03.2004 (Чт) 14:29

Да всегда пожалуйста! :)
Оператор странный - можно сутками искать, как он называется....
И не забывай, что логический NOT всегда перед условием а не внутри него... А то знаю я братьев-сишников, которые его все время в середину пихают, а потом удивляются :wink:
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 18.03.2004 (Чт) 14:46

Т.е. нельзя написать что-то вроде
if not a and b then
....
Bandit

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 18.03.2004 (Чт) 15:04

Да нет :) Можно конечно
Я про то, что братья-сишники, памятуя про != часто пишут NOT Is...

NOT (a AND b)
или там
(NOT a) AND b
или
(NOT a) AND (NOT b)
абсолютно нормальные выражения...
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)

AHTOXA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 147
Зарегистрирован: 17.04.2003 (Чт) 13:38
Откуда: Россия, г. Петрозаводск

Сообщение AHTOXA » 18.03.2004 (Чт) 15:24

Хорошо что вы так подробно осветили вопрос, а то моя основная специализация - C/C++ :)
Bandit

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

Сообщение GSerg » 18.03.2004 (Чт) 16:23

Осветим вопрос подробнее :wink:

Есть функция objptr, возвращающая указатель на объект. Если она даёт NULL (:)), то соответственно :)

Хотя это наверное знают все? :) Anyway, Rainbow, с новым тебя званием :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 19.03.2004 (Пт) 12:26

GSerg писал(а):Осветим вопрос подробнее :wink:
Есть функция objptr, возвращающая указатель на объект. Если она даёт NULL (:)), то соответственно :)
Хотя это наверное знают все? :)

Мда... Человек только-только VB открыл, а ты ему уже про недокументированные фичи толкуешь ;)
Нет, я не спорю с тем, что ObjPtr может оказаться полезным в каких-то случаях... Но вот что это функция первой необходимости... :roll:
MSDN писал(а):SUMMARY
It is uncommon for a Visual Basic programmer to need to obtain low level information on a variable, such as its memory address. However, there are some API functions that require such information. This article describes the following Visual Basic functions that may help a Visual Basic programmer obtain this information:

VarPtr - Returns the address of a variable.
VarPtrArray - Returns the address of an array.
StrPtr - Returns the address of the UNICODE string buffer.
VarPtrStringArray - Returns the address of an array of strings.
ObjPtr - Returns the pointer to the interface referenced by an object variable.

MORE INFORMATION
WARNING: One or more of the following functions are discussed in this article; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. These functions are not supported by Microsoft Technical Support. They are not documented in the Visual Basic documentation and are provided in this Knowledge Base article "as is." Microsoft does not guarantee that they will be available in future releases of Visual Basic.

ObjPtr
ObjPtr takes an object variable name as a parameter and obtains the address of the interface referenced by this object variable.

One scenario of using this function is when you need to do a collection of objects. By indexing the object using its address as the key, you can get faster access to the object than walking the collection and using the Is operator. In many cases, the address of an object is the only reliable thing to use as a key.

Example:

objCollection.Add MyObj1, CStr(ObjPtr(MyObj1))
...
objCollection.Remove CStr(ObjPtr(MyObj1))



GSerg писал(а):Anyway, Rainbow, с новым тебя званием :)

А, спасибо-спасибо! :) Это Егор решил поставить точку в вопросе выяснения моего пола. Коротко и ясно! :lol:
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


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

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

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

    TopList