![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка EOleSysError [D7, WinXP]
Серёга © (2005-06-06 22:18:00)При запуске своего приложения на другой ОС (ХР) выдаётся сообщение, типа:
"Exception EOleSysError at myprogram.exe at (адрес, типа 120021). Не найден указанный модуль. Причём под 2000 виндой, где я делал, и компилируется и запускается нормально. Этот баг обнаружен уже на 2-ом компе их XP. Может кто поможет? Заранее благодарен.
jack128 (2005-06-07 20:33:00) [1]Серёга (07.06.05 17:50) [5]
ShellExecute(GetDesktopWindow,'open','c:\windows\system\regsvr32.exe','c:\windows\system\swflash.ocx',nil,SW_SHOWNORMAL) ;
Delay(3000); // Wait for registration
Б-р-р.. Никогда не делай так. Для таких вещей есть CreateProcess + WaitForSingleObject
Серёга (2005-06-07 17:51:00) [2]Нет, плейер установлен. Это проблема с ActiveX.
Серёга (2005-06-07 17:50:00) [3]Сейчас нашёл то, что мне надо, но к сожалению, под делфу 7 не идёт:
-------------------------------------------------------------
Коммерческие ActiveX компоненты обычно без проблем подключаются к Delphi и позволяют использовать их свойства так же, как и VCL-компонентов. Но начинающий программист будет удивлен, если увидит, что перенесенная на другой компьютер программа не будет работать. Обычно возникает ошибка EOleSysError. Естественно, ведь сервера ActiveX и кода в нем, который отвечает за манипуляцию данными, найти невозможно без регистрации сервера в системе.
Для того, чтобы программа знала, где найти этот код и данные, сервер следует зарегистрировать. В RxLib есть соответствующая функция, но у меня она не сработала. Не знаю, почему. Поэтому предлагаю универсальный способ. В каталоге windows\system есть утилита regsvr32.exe, которая одним параметром принимает имя файла, и регистрирует его. Остальные параметры можете узнать у нее сами.
Пример регистрации, если произошла ошибка EOleSysError. Код из файла .dpr одной из моих программ:
begin
Application.Initialize;
try Application.CreateForm(TSWFViewForm, SWFViewForm);
except on EOleSysError do //Если возникло исключение, регистрируем сервер
begin
ShellExecute(GetDesktopWindow,'open','c:\windows\system\regsvr32.exe','c:\windows\system\swflash.ocx',nil,SW_SHOWNORMAL) ;
Delay(3000); // Wait for registration
try Application.CreateForm(TSWFViewForm, SWFViewForm);
except MessageDlg('ActiveX сервер не найден!',mtError,[mbOK],0);
end;
end
end;
Application.Run;
end.
Взято с http://eef.ispu.ru/sitestud/sav/activex.htm
------------------------------------------------------
У меня ругается на: EOleSysError, ShellExecute, SW_SHOWNORMAL, Delay, MessageDlg, mtError - Undeclared identifier.
VMcL (2005-06-07 17:40:00) [4]>> Серёга (07.06.05 17:34) [3]
> У меня - да, но почему то на некоторых других компах - нет...
Вероятно, потому что на этих "других компах" не установлен Flash Player.
Серёга (2005-06-07 17:34:00) [5]{Шерсти весь код, который выполняется до Application.Run. те виднее, что ты там с com делаешь}
Тяжело, когда на своём РС всё работает, и постоянно ходить к кому-то и тестить, в чём дело накладно. Благо повезло, долго ходить не пришлось, и я понял, что проблема в компоненте ShockwaveFlashObjects_TLB. Он предназначен для вставки в проект flash-роликов. Как заявляет автор статьи сайта http://delphid.dax.ru(Delphi и Flash. Совмещение несовместимого!), в дэлфе флэш идёт. У меня - да, но почему то на некоторых других компах - нет... может кто скажет, есть ли выход?
jack128 (2005-06-06 22:46:00) [6]А чего тут скажешь.. Шерсти весь код, который выполняется до Application.Run. те виднее, что ты там с com делаешь..
KilkennyCat (2005-06-06 22:23:00) [7]I>
> Может кто поможет?
могу удар милосердия сделать.