Nestor
Junior Member / Новичок
Участник № / Member № 1148
отправлено / posted
День добрый! 1. Имеем базовый TraceMode 6.06.3. В каталоге с установленным ТМ берем tmx\Tmx.zip (что как говорится в справочной системе есть пример компонента ActiveX, реализующего Custom-интерфейс). 2. Распаковываем файлы проекта, и обнаруживаем, что проект создан MS Visual Studio 6.0 (а не 5.0 + ATL 2.0 как сказано в help'е). В принципе не страшно - ставим MSVC6.0. 3. Обнаруживаем, что во всех шести предлагаемых вариантах сборки (Debug, Release, ...) есть те или иные "особенности": 3.1. во всех случаях не находится файл rttypes.h (добавляем в проект rttypes.idl и настраиваем свойства компилятора midl - проблема частично решается) 3.2. в версиях сборки Unicode MIDL'у как-то не по себе (Error executing midl.exe) - В свойствах *.idl файлов проекта TMXLIB отменяем "MkTypLib compatible" для MIDL. 3.3. уже лучше, но возникает проблема с функцией swprintf в файле Spin.cpp при компиляции в юникод. Ну это и не проблема даже, а так досадное недоразумение: оборачиваем строковую константу "%d" в TCHAR, т.е.
code:
_stprintf(buf,_T("%d"),int(m_val.f));
В случае без юникода проект уже успешно компилируется в DEBUG-версиях. 3.4. C четырьмя оставшимися Release-конфигурациями продолжаем плясать с бубном: решать странную ошибку линкера "error LNK2001: unresolved external symbol _main" В итоге в StdAfx.cpp выискиваются интересные строки
Ладно, последние два файла не страшны - ничего кроме комментариев в них уже много лет как нет, а вот atlimpl.cpp вторую main (пусть бы она и называлась DllMain) создает. Убираем эти пресловутые инклюды - получаем компилируемые исходные коды во всех 6-и конфигурациях. 4. Хорошо что в проекте tmxlib есть Post-Build, который всякий раз регистрирует tmxlib.dll после сборки, но regsvr32 в принципе запустить вручную не трудно (Вспомнним про него тут, чтобы потом вопросов более не возникало). 5. ChBase.dll когда-то уже был зарегистрирован, но для надежности регистрируем еще раз. И про то, что аналогичную операцию надо проделать с tmauxdsp.dll на форуме обнаруживаем. И его регистрируем. 6. Запускаем TM и создаем простой проект, где на экран пытаемся утсановить скомпилированное чудо (любое из шести!): 6.1. Среди любезно отфильтрованных TraceMode extensions only выбираем TraceMode Spin Control в результате получаем простой прямоугольник, ну никак на SpinCtrl не похожий: ни числа, ни кнопок - одна подложка. Правда на вторые сутки мучений что-то все же произошло (то ли перезагрузка повлияла, то ли звезды иначе легли, хотя наверное все же из-за установки TM5.12 на той же машине) ситуация стала аналогичной п.6.3. 6.2. Становится интересно, а как же должен выглядеть компонент - и в InternetExplorer при просмотре файла Spin.htm (благо есть такой в tmx.zip) SpinControl всетаки появляется. 6.3. Заново запускаем ТМ6 и из общего числа ActiveX компонентов выбираем все тот же TraceMode Spin Control, теперь он уже отображается. Даже больше, если не забыли про tmauxdsp.dll, то и окно свойств привязки появляется (ну а если забыли зарегистрировать, то и нет никаких окон разумется). Вот только нажимать на кнопки Up/Dwn этого контрола не получается - валится TM6 с кучей exceptions. 7. При размещении TraceMode Spin Control в ActiveX Control Test Container (утилиты из VC6) компонент есть, а событий от него нет (в отличии скажем от Microsoft Forms 2.0 SpinButton).
Вопрос: ЧТО ЕЩЕ НАДО СДЕЛАТЬ, А ЧЕГО НЕ НАДО ДЕЛАТЬ чтобы в свой TM-проект вставить ActiveX c Custom интерфейсом? Или может есть пример такой рабочей связки? Не обязательно и под VC6, лишь бы на С++
Сообщения / Posts 17 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nestor
Junior Member / Новичок
Участник № / Member № 1148
отправлено / posted
И вот что занятно. В ТМ5.12 этот несчастный SpinControl из tmxlib прекрасно (в силу своего назначения, конечно) работает, а вот в ТМ6, для которого якобы и создан, нет. Печально все это. :(
Может быть пример под шестерку существовал в релизе 6.04, как упоминается на форуме, да так там и остался, не дожил до наших дней?
Сообщения / Posts 17 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
1. Не совсем понятно, какая версия tmxlib идет в дистибутиве. В том проекте, который у нас есть, не 6, а 4 возможных конфигурации. 2. Пересобрали на VC++ .net - наш рабочий компилятор. Есть ошибка при сборке unicode release - версии. Разбираемся. 3. Исправили некоторые ошибки в проекте. Проверили работу собранного модуля в релизе 6.02 - все работает нормально, за исключением того, что выбор компонента из списка для установки надо делать из полного (сняв флажок trace mode extension only). Фиксация того, что нужно вставлять выполняется сейчас в момент изменения текущего выбранного в списке - если список из одного элемента, этого не произойдет и вставится пустое серое окошко. В след релизе будет исправлено.
4. Поправили tmx.doc в соответствии с версией ТМ и VC - правки минимальные, в принципе в хелпе все описано правильно.
5. Если требуется экспонировать события в Test Container - нужно ActiveX с использованием интерфейса IDispatch - все документировано.
У меня абсолютно сходные проблемы с компонентой ActiveX, как и у Nestor. То, что идет в комплекте с инсталлятором TM, ни в какую компилироваться не хочет. Не могли бы Вы выслать на мой почтовый ящик и мне сей замечательный исправленный полный комплект для сборки (ну и готовый модуль). Очень хочется самому писать ActiveX под TM. А судя по куче нюансов, это можно сделать только при наличии готового рабочего примера.
Сообщения / Posts 2 | Из / From: Украина
| IP / IP: IP адрес / IP address |
NestorIT
Forum Member / Участник форума
Участник № / Member № 4337
отправлено / posted
Вот уже релиз 6.07.7 давно вышел и его дистрибутив как минимум один раз даже менялся, а tmxlib в комплекте на рабочий так никто заменить и не удосужился
Сообщения / Posts 35 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
tmxlib.dll является результатом компиляции предложенного примера. Поэтому в состав штатного пакета примера она не входит.
Сообщения / Posts 17315 | Из / From: Россия
| IP / IP: IP адрес / IP address |