This is topic Пример ActiveX in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/000768.html

Posted by Nestor (Участник № / Member № 1148) on :
 
День добрый!
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 выискиваются интересные строки
code:
  
#include <atlimpl.cpp>
#include <atlctl.cpp>
#include <atlwin.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, лишь бы на С++
 
Posted by Nestor (Участник № / Member № 1148) on :
 
И вот что занятно. В ТМ5.12 этот несчастный SpinControl из tmxlib прекрасно (в силу своего назначения, конечно) работает, а вот в ТМ6, для которого якобы и создан, нет. Печально все это. :(

Может быть пример под шестерку существовал в релизе 6.04, как упоминается на форуме, да так там и остался, не дожил до наших дней?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Разбираемся с данной ситуацией.
 
Posted by Nestor (Участник № / Member № 1148) on :
 
Будем ждать вердикта.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
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 - все документировано.

Посылаем Вам полный комплект для сборки и готовый модуль.
 
Posted by Nestor (Участник № / Member № 1148) on :
 
Спасибо огромное!
Этот пример уже действительно работает.
 
Posted by Александр Резниченко (Участник № / Member № 4241) on :
 
Уважаемая тех. поддержка.

У меня абсолютно сходные проблемы с компонентой ActiveX, как и у Nestor. То, что идет в комплекте с инсталлятором TM, ни в какую компилироваться не хочет.
Не могли бы Вы выслать на мой почтовый ящик и мне сей замечательный исправленный полный комплект для сборки (ну и готовый модуль).
Очень хочется самому писать ActiveX под TM. А судя по куче нюансов, это можно сделать только при наличии готового рабочего примера.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Отправлено.
 
Posted by Александр Резниченко (Участник № / Member № 4241) on :
 
Спасибо, получил. Будем разбираться что к чему.
 
Posted by Chert1985 (Участник № / Member № 5472) on :
 
Добрый день. Могу я тоже получить исправленный пример?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Отправлено.
 
Posted by NestorIT (Участник № / Member № 4337) on :
 
Вот уже релиз 6.07.7 давно вышел и его дистрибутив как минимум один раз даже менялся, а tmxlib в комплекте на рабочий так никто заменить и не удосужился [Неодобрение / Frown]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
tmxlib.dll является результатом компиляции предложенного примера. Поэтому в состав штатного пакета примера она не входит.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2