В комплекте TM6 идёт пример ActiveX-компонента для Visual C++ 5. Но под Visual C++ 6 компонент не компилируется: ошибку выдаёт компилятор midl.exe. Есть ли возможность получить пример ActiveX (исходный текст), компилируемый под Visual C++ 6? VC++ 6 при компиляции выдает следующее: Creating Type Library... tmxlib.idl oaidl.idl objidl.idl unknwn.idl wtypes.idl ocidl.idl oleidl.idl servprov.idl urlmon.idl msxml.idl rttypes.idl Error executing midl.exe. Tmxlib.dll - 1 error(s), 0 warning(s) Может быть нужно поменять какие-нибудь ключи для midl.
midl установлен, и расположен в папке Bin Visual Studio.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Tmxlib.dsp: # Microsoft Developer Studio Generated Build File, Format Version 6.00. Это 6-я версия
Пример компилируется midl'ом 6-й версии без специальных ключей. Попробуйте вручную скомпилировать midl tmxaux.idl и сообщите результат - если есть ошибка, она должна быть указана явно - не найден файл ххх и т.п.
Posted by Soyuz (Участник № / Member № 2028) on :
Я еще вчера скомпилировал *.idl файлы. Но как построить сам ActiveX? Выдает все те же сообщения. Возможно нужно указать в среде Visual C++ 6 путь к midl, раз он его не может запустить! Спасибо.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Судя по всему, Вы передали нам не полную диагностику. Пришлите, пожалуйста, на адрес техподдержки полный вывод компилятора, от командной строки. А пока попробуйте создать простенький ActiveX с использованием ATL, если получится - посмотрите разницу в проектах.
Posted by Soyuz (Участник № / Member № 2028) on :
С Новым Годом! И продолжая... У меня таки получилось построить dll, правда только в Debug конфигурации. При этом в настройках проекта, в закладке MIDL я предварительно все очистил (так как и в пустом ActiveX с использованием ATL). Почему Release конфигурации не проходят? Вот строки ошибки: Generating Code... Linking... Creating library ReleaseUMinDependency/Tmxlib.lib and object ReleaseUMinDependency/Tmxlib.exp LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main ReleaseUMinDependency/Tmxlib.dll : fatal error LNK1120: 1 unresolved externals Error executing link.exe.
И еще возникла одна ошибка связанная с функцией _stprintf(). Я заменил ее на sprintf().
HRESULT CSpin::OnDraw(ATL_DRAWINFO& di) { // Draw something to output to printer.. RECT& rc = *(RECT*)di.prcBounds; HBRUSH br = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); FillRect(di.hdcDraw,&rc,br); DeleteObject(br); //_TCHAR buf[48]; //_stprintf(buf,"%d",int(m_val.f)); char buf[48]; sprintf(buf,"%d",int(m_val.f)); DrawText(di.hdcDraw,(const unsigned short *)buf, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE); return S_OK; }
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. По ошибке с линковкой сказать точно пока ничего не можем, ещё раз внимательно смотрите отличия настроек Вашего проекта от tmxlib. 2. Выберете конфигурацию ReleaseMinDependency, т.е. без unicode (ошибка связанная с функцией sprintf() связана именно с этим).
Posted by Дмитрий Юрьевич М. (Участник № / Member № 1930) on :
Скажите, пожалуйста, уважаемая техническая поддержка. Как заставить работать Active-X, написанный в Visual Studio 2005? Даже пустой Active-X (только что созданный проект) при добавлении на экран TraceMode выкидывает исключение, после чего TM закрывается. Не работают все конфигурации (release, debug, со статической линковкой и без, с юникодом и без оного). Что делать? Active-X, созданные в Visual Studio 6.0 работают. Но купить лицензионную студию уже не представляется возможным. Что нам делать?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Есть подозрение, что причинами возникновения подобной ошибки могут являться разногласия в интерфейсах, задействованных при создании ActiveX приложений. Мы работаем в этом направлении. Дле текущего решения рекомендуем использовать Visual Studio до версии 2003 с компонентами MFC. Для работы с Visual Studio 2005 используйте компоненты ATL.