Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет ringill ([info]ringill)
@ 2006-10-30 16:52:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
COM-Automation в VisualWorks Smalltalk
Хорошо, но мало: например, не все типы COM VARIANT-ов поддерживаются. Мне, в частности, понадобился тип VT_INT (код 22).
Насколько я понимаю, обычный для Smalltalk подход при кодировании или раскодировании бинарных данных, представленных в виде блоков с идентификаторами типа -- вместо большого ветвления (switch) делать массив или хэш-таблицу с селекторами (т.е. именами) маленьких методов, каждый из которых обрабатывает блоки своего типа.
Я добавил кодер и декодер для VT_INT в стандартный класс COMVariantStructure, и прописал их в массивах EncoderSelectors и DecoderSelectors, создаваемых в методе initializeTranslationMaps:
	DecoderSelectors := #(
		#xEMPTY #xNULL #xI2 #xI4 #xR4 #xR8 #xCY #xDATE #xBSTR
		#xDISPATCH #xERROR #xBOOL #xVARIANT #xUNKNOWN
		#xIllegal #xIllegal #xIllegal #xUI1 #xUI2 #xUI4 #xIllegal #xIllegal #xINT ).

	EncoderSelectors := #(
		#xEMPTY: #xNULL: #xI2: #xI4: #xR4: #xR8: #xCY: #xDATE: #xBSTR:
		#xDISPATCH: #xERROR: #xBOOL: #xVARIANT: #xUNKNOWN:
		#xIllegal: #xIllegal: #xIllegal: #xUI1: #xUI2: #xUI4: #xIllegal: #xIllegal: #xINT: ).