Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ActiveX не работает на других компах, как внедрить в код нужные библиотеки 
:(
    Опции темы
Max_1_
Дата 6.11.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Всем привет! Помогите пожалуйста.
Написал программу на Visual C++. Проект такого типа MFC->SDI. (не использовал .NET, )
В программе использовал activex - компонент таблицу (от ComponentOne)
Программа работает на моем компе, а на других нет. 
(выскакивает сообщение: An supported operation was attempted)
Думаю, что необходимо както внедрить в код библиотеки компонента.
Как мне это сделать?
Причем до этого прогу написал с использованием тоже activex-компонента таблицы, но уже микрософтовской.
Та прога работала везде.

Это сообщение отредактировал(а) Max_1_ - 6.11.2007, 22:26
PM MAIL   Вверх
xvr
Дата 7.11.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Max_1_ @ 6.11.2007,  22:25)
Всем привет! Помогите пожалуйста.
Написал программу на Visual C++. Проект такого типа MFC->SDI. (не использовал .NET, )
В программе использовал activex - компонент таблицу (от ComponentOne)
Программа работает на моем компе, а на других нет. 
(выскакивает сообщение: An supported operation was attempted)
Думаю, что необходимо както внедрить в код библиотеки компонента.
Как мне это сделать?
Причем до этого прогу написал с использованием тоже activex-компонента таблицы, но уже микрософтовской.
Та прога работала везде.

Отсуствует ActiveX компонент на другом компе. Необходимо инсталировать его на этом самом компе. Вариантов инсталяции может быть много, и в первую очередь это зависит от самого ActiveX компонента. В простейшем случае будет достаточно скопировать файл с ним куда-нибудь в папку к Windows (или в папку со своим приложением) и вызвать regsvr32 /s <ActiveX file>. Файл с компонентом можно поместить в ресурс приложения и извлечь его оттуда при инсталяции. Если компонент требует более одного файла или идет со своим собственным инсталятором, то можно все это завернуть в самораспаковывающийся архив, поместить его в ресурс и при инсталяции извлечь и распаковать, после чего установить.
Для проверки, установлен ли компонент на машине можно попробовать создать экземпляр объекта - если будет ошибка REGDB_E_CLASSNOTREG то компонент не установлен.

PM MAIL   Вверх
Max_1_
Дата 7.11.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Спасибо понял в чем дело.
А если я смогу проверить установлен ли компонент на машине как ты сказал, то можно ли прям из программы зарегистрировать?
Наверно придется пользоваться Api функциями?
PM MAIL   Вверх
xvr
Дата 7.11.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Max_1_ @ 7.11.2007,  18:50)
Спасибо понял в чем дело.
А если я смогу проверить установлен ли компонент на машине как ты сказал, то можно ли прям из программы зарегистрировать?
Наверно придется пользоваться Api функциями?

Зарегистрировать можно. Нужно вызвать функцию DllRegisterServer из файла с компонентом ActiveX (это обычная dll). Приблизительно так (копия из MSDN):
Код

HINSTANCE hLib = LoadLibrary(pszDllName);

if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
   DisplayMessage(IDS_LOADLIBFAILED, pszDllName); //unable to load DLL
   iReturn = FAIL_LOAD;                           //unable to load DLL
}

// Find the entry point.
(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib,   _T("DllRegisterServer"));
if (lpDllEntryPoint != NULL)
   (*lpDllEntryPoint)();
else
   // Unable to locate entry point


Еще оттуда же:
Цитата

Note   Before your setup program installs an ActiveX control, it should call OleInitialize. When your setup program is finished, call OleUnitialize. This ensures that the OLE system DLLs are in the proper state for registering an ActiveX control.


PM MAIL   Вверх
Max_1_
Дата 8.11.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Большое спасибо!
Буду пробовать...
PM MAIL   Вверх
Max_1_
Дата 8.11.2007, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



заработало! УРА! 
вот это супер.
Ещё раз спасибо XVR smile


_______________________
Проблема решена.
PM MAIL   Вверх
Fobos
Дата 30.5.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



У меня аналогичная проблема: в результате запуска программы вылазить сообщение 
Приложение не было запущено, поскольку оно некорректно настроено.
Повторная установка приложения может решить данную проблему.
Писал в Visual Studio с использованием MFC.
Если я не ошибаюсь, то List Control который я использовал в программе является ActiveX компонентом, как мне найту ту библиотеку в которой он содержится, чтобы установить ее на другом компе.
PM MAIL ICQ   Вверх
xvr
Дата 30.5.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Fobos @ 30.5.2009,  18:24)
У меня аналогичная проблема: в результате запуска программы вылазить сообщение 
Приложение не было запущено, поскольку оно некорректно настроено.
Повторная установка приложения может решить данную проблему.

Это не ActiveX, это банальное отсуствие нужных dll
Цитата

Писал в Visual Studio с использованием MFC.
Скорее всего отсуствуют run-time библиотеки VS. Посмотри какие библиотеки использует приложение и перенеси недостающие. Или слинкуй приложение статически
Цитата

Если я не ошибаюсь, то List Control который я использовал в программе является ActiveX компонентом, как мне найту ту библиотеку в которой он содержится, чтобы установить ее на другом компе.
Что бы сломалось из-за отсуствия ActiveX программа должна как минимум запустится, т.к. ActiveX контролы грузятся динамически, т.е. РАБОТАЮЩЕЙ программой

PM MAIL   Вверх
Fobos
Дата 30.5.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Я просмотрел таблицу импорта этого приложения, все библиотеки которые там были я скинул в папку программы, но сообщение выпадает тоже самое. 
PM MAIL ICQ   Вверх
jonie
Дата 30.5.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



скинули те длл-ки и что? это ничего не значит. Могут быть более глубокие зависимости. Используйте depends.exe (входит в поставку студии) для анализа зависимостей.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Fobos
Дата 30.5.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Ну я по этой рограмме все зависимости посмотрел, у меня все есть, за иключением этих трех, но они есть в папке программы:
MFC80U.DLL MSVCP80.DLL MSVCR80.DLL
программа не работает, может еще у кого есть какие мысли
PM MAIL ICQ   Вверх
xvr
Дата 31.5.2009, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Fobos @ 30.5.2009,  21:57)
Ну я по этой рограмме все зависимости посмотрел, у меня все есть, за иключением этих трех, но они есть в папке программы:
MFC80U.DLL MSVCP80.DLL MSVCR80.DLL
программа не работает, может еще у кого есть какие мысли

Глупый вопрос - а сама программа есть в папке с программой?  smile Она случайно не лежит в какой нибудь вложенной папке. А запускается она оттуда, её случайно не скопировали куда нибудь в %WINDOWS% ?
Попробуй (в качестве эксперимента) эти - MFC80U.DLL MSVCP80.DLL MSVCR80.DLL в %WINDOWS%/System32 бросить


Это сообщение отредактировал(а) xvr - 31.5.2009, 09:15
PM MAIL   Вверх
Fobos
Дата 31.5.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Скинул библиотеки в папку system32 тоже не помогло. Может выложить файл, кто-нибудь сам посмотрит или в связи с эпидемиями вирусов такой вариант не прокатит, могу в исходниках выложить чтобы была возможность саоммоу скомпилировать.
PM MAIL ICQ   Вверх
Cheloveck
Дата 31.5.2009, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Fobos, скинуть библиотеки мало, они регятся в системе ещё. Поставь vc redistributable своей версии


--------------------
user posted image
PM Jabber   Вверх
Fobos
Дата 31.5.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Зарегистрировать их не получилось, выскакивает сообщение Runtime error, неправльное обращение с библиотеке выполнения С.
Слушайте, но проблема с  которой я сталкиваюсь должна встречаться всем кто пишет программы не только для себя( у него-то понятно она запустится). Не может быть чтобы на этом форуме никто больше не сталкивался с этой проблемой.
PM MAIL ICQ   Вверх
Rififi
Дата 31.5.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 1
Всего: 36



Fobos, 
программа не работает, может еще у кого есть какие мысли 
гоогле "side-by-side", "sxs", "manifest"

PM MAIL   Вверх
jonie
Дата 2.6.2009, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



а также насчет CRT (MSVCRTxx.dll etc.) гогле "VC++ 2008 redistributable"  (версию студии поставьте ту которую используете, вроде 8-ка это 2008)...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Cheloveck
Дата 2.6.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(jonie @  2.6.2009,  08:14 Найти цитируемый пост)
вроде 8-ка это 2008

2008- это 9-ка



--------------------
user posted image
PM Jabber   Вверх
Fobos
Дата 3.6.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



В общем на вируальной машине с чистой виндой ХР я запустил свою прогу, нашел необходимые файлы для запуска. Подбирать их пришлось вручную играя содержимым папки C:\WINDOWS\WinSxS. Вышло 2 библиотеки два файла манифеса и два файла безопасности.Но при запуске второй программы написанной в Студии 2008 но консольной версии эти файлы уже не помогаю запустиь программу и их придется подбирать заново. Хотел бы попросить помощи для того чтобы разобраться в этом вопросе и не тупо их подбирать:что такое файлы манифеста, что это за папка такая волшебная WinSxS и почему нельзя в сам дистрибутив винды вставить все необходимые файлы манифеста и библиотеки для того чтобы программа могла запуститься. Зачем нагородили такой огород. Буду очень признаелен за помощь.
PM MAIL ICQ   Вверх
jonie
Дата 4.6.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



WinSxS своего рода "мета" папка где хранятся ссылки (обычно) на разные версии разных библиотек. Манифест помогает узнать какие конкретно версии фалов тебе нужны, ну и служит вообще для настройки приложения в том числе. подробно о нем написано много воды в msdn.
Для студии есть vcredist пакеты, там все runtime библиотеки, которые нужны по идее. Лежит это тут: c:\Program Files\Microsoft Visual Studio 9.0\VC\redist\, а в интернет можно найти конкретные инсталяшки этого всего (на майкрософтовском сайте). И об этом я уже писал:
Цитата
а также насчет CRT (MSVCRTxx.dll etc.) гогле "VC++ 2008 redistributable"  (версию студии поставьте ту которую используете, вроде 8-ка это 2008)...



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Fobos
Дата 10.6.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 9.2.2008
Где: Москва

Репутация: нет
Всего: нет



Спасибо всем за помощь, скачал VC++ 2008 redistributable с его помощью программа запускается на любом компьютере. Хотел бы уточнить кое-какие моменты. Почему эти библиотеки не включить в дистрибутив винды, они не так уж и много занимают? И второе: а в чем пишуть файлы установки вот этих runtime библиотек? Буду очень признателен за помощь.
PM MAIL ICQ   Вверх
xvr
Дата 10.6.2009, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Fobos @ 10.6.2009,  09:27)
Почему эти библиотеки не включить в дистрибутив винды, они не так уж и много занимают? 

Они туда в конце концов попадают, но с изрядным опозданием, версии VS выходят чаще, чем версии Винды.
Цитата

И второе: а в чем пишуть файлы установки вот этих runtime библиотек? Буду очень признателен за помощь.
Родной для MS формат - msi (искать в MSDN по этому слову). Есть тулз (IMHO), который эти msi умеет делать (нечто типа ассемблера msi). Никто в здравом рассудке этим тулзом напрямую не пользуется  smile 
Есть масса фирм, которые делают массу инсталяторов, таких как InstallShield, Wise, Inno Setup, и еще много много
PM MAIL   Вверх
jonie
Дата 10.6.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



msi уже устарел насколько я  знаю, в висте и более поздних уже другие форматы...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.